From 6ad41e3ccd398a2721f41ad61c80b7bb03f7d127 Mon Sep 17 00:00:00 2001 From: Ittay Stern Date: Mon, 31 Dec 2018 17:21:27 +0200 Subject: Merge from ECOMP's repository Main Features -------------- - Async-Instantiation jobs mechanism major update; still WIP (package `org.onap.vid.job`) - New features in View/Edit: Activate fabric configuration; show related networks; soft delete - Support AAI service-tree traversal (`AAIServiceTree`) - In-memory cache for SDC models and certain A&AI queries (`CacheProviderWithLoadingCache`) - Upgrade TOSCA Parser and add parsing options; fix malformed TOSCA models - Resolve Cloud-Owner values for MSO - Pass X-ONAP headers to MSO Infrastructure -------------- - Remove codehaus' jackson mapper; use soley fasterxml 2.9.7 - Surefire invokes both TestNG and JUnit tests - Support Kotlin source files - AaiController2 which handles errors in a "Spring manner" - Inline generated-sources and remove jsonschema2pojo Quality -------- - Cumulative bug fixes (A&AI API, UI timeouts, and many more) - Many Sonar issues cleaned-up - Some unused classes removed - Minor changes in vid-automation project, allowing some API verification to run Hard Merges ------------ - HTTP Clients (MSO, A&AI, WebConfig, OutgoingRequestHeadersTest) - Moved `package org.onap.vid.controllers` to `controller`, without plural -- just to keep semantic sync with ECOMP. Reference commit in ECOMP: 3d1141625 Issue-ID: VID-378 Change-Id: I9c8d1e74caa41815891d441fc0760bb5f29c5788 Signed-off-by: Ittay Stern --- .../org/onap/vid/asdc/parser/ToscaParserImpl2.java | 449 +++++++++++++-------- 1 file changed, 274 insertions(+), 175 deletions(-) (limited to 'vid-app-common/src/main/java/org/onap/vid/asdc/parser/ToscaParserImpl2.java') diff --git a/vid-app-common/src/main/java/org/onap/vid/asdc/parser/ToscaParserImpl2.java b/vid-app-common/src/main/java/org/onap/vid/asdc/parser/ToscaParserImpl2.java index 57d80ce9d..53ec4036b 100644 --- a/vid-app-common/src/main/java/org/onap/vid/asdc/parser/ToscaParserImpl2.java +++ b/vid-app-common/src/main/java/org/onap/vid/asdc/parser/ToscaParserImpl2.java @@ -1,11 +1,12 @@ package org.onap.vid.asdc.parser; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; +import org.onap.sdc.tosca.parser.enums.FilterType; +import org.onap.sdc.tosca.parser.enums.SdcTypes; import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException; -import org.onap.sdc.tosca.parser.impl.FilterType; import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory; -import org.onap.sdc.tosca.parser.impl.SdcTypes; import org.onap.sdc.toscaparser.api.Group; import org.onap.sdc.toscaparser.api.*; import org.onap.sdc.toscaparser.api.elements.Metadata; @@ -15,87 +16,112 @@ import org.onap.vid.model.*; import java.nio.file.Path; import java.util.*; -import java.util.stream.Collectors; +import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toMap; import static org.onap.vid.asdc.parser.ToscaParserImpl2.Constants.VF_MODULE_LABEL; public class ToscaParserImpl2 { - - public class Constants { - public final static String UUID = "UUID"; - public final static String DESCRIPTION = "description"; - public final static String SERVICE_TYPE = "serviceType"; - public final static String SERVICE_ROLE = "serviceRole"; - public final static String ECOMP_GENERATED_NAMING = "ecompGeneratedNaming"; - - public final static String CUSTOMIZATION_UUID = "customizationUUID"; - public final static String VF_MODULE_MODEL_VERSION = "vfModuleModelVersion"; - public final static String VF_MODULE_MODEL_CUSTOMIZATION_UUID = "vfModuleModelCustomizationUUID"; - public final static String VOLUME_GROUP = "volume_group"; - public final static String VF_MODULE_MODEL_INVARIANT_UUID = "vfModuleModelInvariantUUID"; - public final static String VF_MODULE_MODEL_UUID = "vfModuleModelUUID"; - public final static String INVARIANT_UUID = "invariantUUID"; - public final static String VERSION = "version"; - public final static String NAME = "name"; - public final static String CATEGORY = "category"; - public final static String VF_MODULE_MODEL_NAME = "vfModuleModelName"; - public final static String GET_INPUT = "get_input"; - public final static String TYPE = "type"; - - public final static String INSTANTIATION_TYPE = "instantiationType"; + + private final VidNotionsBuilder vidNotionsBuilder; + + public class Constants { + public static final String UUID = "UUID"; + public static final String DESCRIPTION = "description"; + public static final String SERVICE_TYPE = "serviceType"; + public static final String SERVICE_ROLE = "serviceRole"; + public static final String ECOMP_GENERATED_NAMING = "ecompGeneratedNaming"; + + public static final String CUSTOMIZATION_UUID = "customizationUUID"; + public static final String VF_MODULE_MODEL_VERSION = "vfModuleModelVersion"; + public static final String VF_MODULE_MODEL_CUSTOMIZATION_UUID = "vfModuleModelCustomizationUUID"; + public static final String VOLUME_GROUP = "volume_group"; + public static final String VF_MODULE_MODEL_INVARIANT_UUID = "vfModuleModelInvariantUUID"; + public static final String VF_MODULE_MODEL_UUID = "vfModuleModelUUID"; + public static final String INVARIANT_UUID = "invariantUUID"; + public static final String VERSION = "version"; + public static final String NAME = "name"; + public static final String CATEGORY = "category"; + public static final String VF_MODULE_MODEL_NAME = "vfModuleModelName"; + public static final String GET_INPUT = "get_input"; + public static final String TYPE = "type"; + + public static final String INSTANTIATION_TYPE = "instantiationType"; //instantiation type - public final static String BOTH = "Both"; - public final static String MACRO = "Macro"; - public final static String A_LA_CARTE = "A-La-Carte"; - public final static String CLIENT_CONFIG = "ClientConfig"; + public static final String BOTH = "Both"; + public static final String MACRO = "Macro"; + public static final String A_LA_CARTE = "A-La-Carte"; + public static final String CLIENT_CONFIG = "ClientConfig"; + + //service role + public static final String GROUPING = "GROUPING"; //group properties - public final static String MIN_VF_MODULE_INSTANCES = "min_vf_module_instances"; - public final static String MAX_VF_MODULE_INSTANCES = "max_vf_module_instances"; - public final static String INITIAL_COUNT = "initial_count"; - public final static String VF_MODULE_LABEL = "vf_module_label"; + public static final String MIN_VF_MODULE_INSTANCES = "min_vf_module_instances"; + public static final String MAX_VF_MODULE_INSTANCES = "max_vf_module_instances"; + public static final String INITIAL_COUNT = "initial_count"; + public static final String VF_MODULE_LABEL = "vf_module_label"; + public static final String VF_MODULE_TYPE = "vf_module_type"; //collection resource properties - public final static String SUBCATEGORY = "subcategory"; - public final static String RESOURCE_VENDOR = "resourceVendor"; - public final static String RESOURCE_VENDOR_RELEASE = "resourceVendorRelease"; - public final static String RESOURCE_VENDOR_MODEL_NUMBER = "resourceVendorModelNumber"; - public final static String ORG_OPENECOMP_GROUPS_NETWORK_COLLECTION = "org.openecomp.groups.NetworkCollection"; - public final static String NETWORK_COLLECTION_FUNCTION = "network_collection_function"; - public final static String NETWORK_COLLECTION_DESCRIPTION = "network_collection_description"; + public static final String SUBCATEGORY = "subcategory"; + public static final String RESOURCE_VENDOR = "resourceVendor"; + public static final String RESOURCE_VENDOR_RELEASE = "resourceVendorRelease"; + public static final String RESOURCE_VENDOR_MODEL_NUMBER = "resourceVendorModelNumber"; + public static final String ORG_OPENECOMP_GROUPS_NETWORK_COLLECTION = "org.openecomp.groups.NetworkCollection"; + public static final String NETWORK_COLLECTION_FUNCTION = "network_collection_function"; + public static final String NETWORK_COLLECTION_DESCRIPTION = "network_collection_description"; //vfc instance group properties - public final static String VFC_INSTANCE_GROUP_TYPE = "org.openecomp.groups.VfcInstanceGroup"; - public final static String VFC_PARENT_PORT_ROLE = "vfc_parent_port_role"; - public final static String SUBINTERFACE_ROLE = "subinterface_role"; - public final static String VFC_INSTANCE_GROUP_FUNCTION = "vfc_instance_group_function"; + public static final String VFC_INSTANCE_GROUP_TYPE = "org.openecomp.groups.VfcInstanceGroup"; + public static final String VFC_PARENT_PORT_ROLE = "vfc_parent_port_role"; + public static final String SUBINTERFACE_ROLE = "subinterface_role"; + public static final String VFC_INSTANCE_GROUP_FUNCTION = "vfc_instance_group_function"; + + public static final String FABRIC_CONFIGURATION_TYPE = "org.openecomp.nodes.FabricConfiguration"; + + public static final String RESOURCE_GROUP_TYPE = "org.openecomp.groups.ResourceInstanceGroup"; + public static final String RESOURCE_GROUP_CONTAINED_TYPE = "contained_resource_type"; + + public static final String VNF_GROUP = "VnfGroup"; + + public static final String NAMING_POLICY_TYPE = "org.openecomp.policies.External"; + + public static final String ECOMP_GENERATED_NAMING_PROPERTY = "ecomp_generated_naming"; } - - public ToscaParserImpl2() {} - public ServiceModel makeServiceModel(Path path, Service asdcServiceMetadata) throws SdcToscaParserException { + public ToscaParserImpl2(VidNotionsBuilder vidNotionsBuilder) { + this.vidNotionsBuilder = vidNotionsBuilder; + } + + public ServiceModel makeServiceModel(Path path, Service asdcServiceMetadata) throws SdcToscaParserException { ServiceModel serviceModel = new ServiceModel(); - SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); - ISdcCsarHelper sdcCsarHelper = factory.getSdcCsarHelper(path.toFile().getAbsolutePath(),false); + ISdcCsarHelper sdcCsarHelper = getSdcCsarHelper(path); + List policiesTargets = extractNamingPoliciesTargets(sdcCsarHelper); serviceModel.setService(extractServiceFromCsar(asdcServiceMetadata, sdcCsarHelper)); serviceModel.setVolumeGroups(extractVolumeGroups(sdcCsarHelper)); serviceModel.setVfModules(extractVfModuleFromCsar(sdcCsarHelper)); - serviceModel.setVnfs(extractVnfsFromCsar(sdcCsarHelper)); - serviceModel.setConfigurations(extractPortMirroringConfigFromCsar(sdcCsarHelper)); - serviceModel.setServiceProxies(extractServiceProxyFromCsar(sdcCsarHelper)); - serviceModel.setNetworks(extractNetworksFromCsar(sdcCsarHelper)); - serviceModel.setPnfs(extractPnfsFromCsar(sdcCsarHelper)); - serviceModel.setCollectionResource(extractCRFromCsar(sdcCsarHelper)); + serviceModel.setVnfs(extractVnfsFromCsar(sdcCsarHelper, policiesTargets)); + serviceModel.setConfigurations(extractPortMirroringConfigFromCsar(sdcCsarHelper, policiesTargets)); + serviceModel.setServiceProxies(extractServiceProxyFromCsar(sdcCsarHelper, policiesTargets)); + serviceModel.setNetworks(extractNetworksFromCsar(sdcCsarHelper, policiesTargets)); + serviceModel.setPnfs(extractPnfsFromCsar(sdcCsarHelper, policiesTargets)); + serviceModel.setCollectionResource(extractCRFromCsar(sdcCsarHelper, policiesTargets)); + serviceModel.setFabricConfigurations(extractFabricConfigFromCsar(sdcCsarHelper, policiesTargets)); + serviceModel.setVnfGroups(extractVnfGroupsFromCsar(sdcCsarHelper, policiesTargets)); + serviceModel.getService().setVidNotions(vidNotionsBuilder.buildVidNotions(sdcCsarHelper, serviceModel)); return serviceModel; } + public ISdcCsarHelper getSdcCsarHelper(Path path) throws SdcToscaParserException { + SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); + return factory.getSdcCsarHelper(path.toFile().getAbsolutePath(), false); + } - - private org.onap.vid.model.Service extractServiceFromCsar(Service asdcServiceMetadata, ISdcCsarHelper csarHelper) throws SdcToscaParserException { - org.onap.vid.model.Service service = new org.onap.vid.model.Service(); + private org.onap.vid.model.Service extractServiceFromCsar(Service asdcServiceMetadata, ISdcCsarHelper csarHelper) { + org.onap.vid.model.Service service = new org.onap.vid.model.Service(); service.setName(csarHelper.getServiceMetadata().getValue(Constants.NAME)); service.setCategory(csarHelper.getServiceMetadata().getValue(Constants.CATEGORY)); @@ -104,21 +130,25 @@ public class ToscaParserImpl2 { service.setVersion(asdcServiceMetadata.getVersion()); service.setDescription(csarHelper.getServiceMetadata().getValue(Constants.DESCRIPTION)); service.setInputs(inputsListToInputsMap(csarHelper.getInputsWithAnnotations())); - service.setServiceEcompNaming(csarHelper.getServiceMetadata().getValue(Constants.ECOMP_GENERATED_NAMING)); + service.setServiceEcompNaming(isUserProvidingServiceNameOptional(csarHelper)); service.setServiceType(csarHelper.getServiceMetadata().getValue(Constants.SERVICE_TYPE)); service.setServiceRole(csarHelper.getServiceMetadata().getValue(Constants.SERVICE_ROLE)); service.setInstantiationType(validateInstantiationType(csarHelper)); return service; } - private Map extractCRFromCsar(ISdcCsarHelper sdcCsarHelper) { - List nodeTemplates = sdcCsarHelper.getServiceNodeTemplates(); - Map collectionResourceMap = new HashMap<>(); + private String isUserProvidingServiceNameOptional(ISdcCsarHelper csarHelper) { + return ToscaNamingPolicy.isUserProvidingServiceNameOptional(csarHelper); + } + + private Map extractCRFromCsar(ISdcCsarHelper sdcCsarHelper, List policiesTargets) { + List nodeTemplates = sdcCsarHelper.getServiceNodeTemplates(); + Map collectionResourceMap = new HashMap<>(); - for(NodeTemplate nodeTemplate: nodeTemplates){ - if(nodeTemplate.getMetaData().getValue(Constants.TYPE).equals(SdcTypes.CR.getValue())) { + for (NodeTemplate nodeTemplate : nodeTemplates) { + if ( nodeTemplate.getMetaData().getValue(Constants.TYPE).equals(SdcTypes.CR.getValue()) ) { CR cr = new CR(); - populateCrFromNodeTemplate(nodeTemplate, sdcCsarHelper, cr); + populateCrFromNodeTemplate(nodeTemplate, sdcCsarHelper, cr, policiesTargets); collectionResourceMap.put(nodeTemplate.getName(), cr); } } @@ -126,21 +156,39 @@ public class ToscaParserImpl2 { return collectionResourceMap; } - private void populateCrFromNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper sdcCsarHelper, CR cr) { - populateNodeFromNodeTemplate(nodeTemplate, sdcCsarHelper, cr); + private Map extractFabricConfigFromCsar(ISdcCsarHelper sdcCsarHelper, List policiesTargets) { + List nodeTemplates = sdcCsarHelper.getServiceNodeTemplates(); + Map fabricConfiguration = new HashMap<>(); + + for (NodeTemplate nodeTemplate : nodeTemplates) { + List nodeTemplateChildren = sdcCsarHelper.getNodeTemplateChildren(nodeTemplate); + for (NodeTemplate nodeTemplateChild : nodeTemplateChildren) { + if ( nodeTemplateChild.getType().equals(Constants.FABRIC_CONFIGURATION_TYPE) ) { + Node node = new Node(); + fabricConfiguration.put(nodeTemplateChild.getName(), populateNodeFromNodeTemplate(nodeTemplateChild, sdcCsarHelper, node, policiesTargets)); + } + } + + } + return fabricConfiguration; + } + + + private void populateCrFromNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper sdcCsarHelper, CR cr, List policiesTargets) { + populateNodeFromNodeTemplate(nodeTemplate, sdcCsarHelper, cr, policiesTargets); cr.setCustomizationUUID(nodeTemplate.getMetaData().getValue(Constants.CUSTOMIZATION_UUID)); cr.setCategory(nodeTemplate.getMetaData().getValue(Constants.CATEGORY)); - cr.setSubcategory(nodeTemplate.getMetaData().getValue(Constants.SUBCATEGORY)); - cr.setResourceVendor(nodeTemplate.getMetaData().getValue(Constants.RESOURCE_VENDOR)); - cr.setResourceVendorRelease(nodeTemplate.getMetaData().getValue(Constants.RESOURCE_VENDOR_RELEASE)); - cr.setResourceVendorModelNumber(nodeTemplate.getMetaData().getValue(Constants.RESOURCE_VENDOR_MODEL_NUMBER)); - cr.setNetworksCollection(getNetworksCollectionMapFromGroupsList(sdcCsarHelper, nodeTemplate)); + cr.setSubcategory(nodeTemplate.getMetaData().getValue(Constants.SUBCATEGORY)); + cr.setResourceVendor(nodeTemplate.getMetaData().getValue(Constants.RESOURCE_VENDOR)); + cr.setResourceVendorRelease(nodeTemplate.getMetaData().getValue(Constants.RESOURCE_VENDOR_RELEASE)); + cr.setResourceVendorModelNumber(nodeTemplate.getMetaData().getValue(Constants.RESOURCE_VENDOR_MODEL_NUMBER)); + cr.setNetworksCollection(getNetworksCollectionMapFromGroupsList(sdcCsarHelper, nodeTemplate)); } private Map getNetworksCollectionMapFromGroupsList(ISdcCsarHelper sdcCsarHelper, NodeTemplate nodeTemplate) { List groups = sdcCsarHelper.getGroupsOfOriginOfNodeTemplateByToscaGroupType(nodeTemplate, Constants.ORG_OPENECOMP_GROUPS_NETWORK_COLLECTION); - Map networksCollectionMap = new HashMap(); - for(Group group: groups){ + Map networksCollectionMap = new HashMap<>(); + for (Group group : groups) { networksCollectionMap.put(group.getName(), populateCollectionNetworkFromGroup(group, nodeTemplate)); } return networksCollectionMap; @@ -161,44 +209,46 @@ public class ToscaParserImpl2 { LinkedHashMap properties = group.getProperties(); Map nodeTemplateProperties = nodeTemplate.getProperties(); - String networkCollectionFunction = (String)((Map)(properties.get(Constants.NETWORK_COLLECTION_FUNCTION).getValue())).get(Constants.GET_INPUT); - String networkCollectionDescription = (String)((Map)(properties.get(Constants.NETWORK_COLLECTION_DESCRIPTION).getValue())).get(Constants.GET_INPUT); + String networkCollectionFunction = (String) ((Map) (properties.get(Constants.NETWORK_COLLECTION_FUNCTION).getValue())).get(Constants.GET_INPUT); + String networkCollectionDescription = (String) ((Map) (properties.get(Constants.NETWORK_COLLECTION_DESCRIPTION).getValue())).get(Constants.GET_INPUT); - networkCollection.getNetworkCollectionProperties().setNetworkCollectionDescription((String)nodeTemplateProperties.get(networkCollectionDescription).getValue()); - networkCollection.getNetworkCollectionProperties().setNetworkCollectionFunction((String)nodeTemplateProperties.get(networkCollectionFunction).getValue()); + networkCollection.getNetworkCollectionProperties().setNetworkCollectionDescription((String) nodeTemplateProperties.get(networkCollectionDescription).getValue()); + networkCollection.getNetworkCollectionProperties().setNetworkCollectionFunction((String) nodeTemplateProperties.get(networkCollectionFunction).getValue()); } - private Map extractVnfsFromCsar(ISdcCsarHelper csarHelper) { + private Map extractVnfsFromCsar(ISdcCsarHelper csarHelper, List policiesTargets) { List nodeTemplates = csarHelper.getServiceVfList(); - Map vnfsMaps = new HashMap(); + Map vnfsMaps = new HashMap<>(); for (NodeTemplate nodeTemplate : nodeTemplates) { VNF vnf = new VNF(); - populateNodeFromNodeTemplate(nodeTemplate, csarHelper, vnf); + populateNodeFromNodeTemplate(nodeTemplate, csarHelper, vnf, policiesTargets); vnf.setModelCustomizationName(nodeTemplate.getName()); vnf.setVfModules(getVfModulesFromVF(csarHelper, vnf.getCustomizationUuid())); vnf.setVolumeGroups(getVolumeGroupsFromVF(csarHelper, vnf.getCustomizationUuid())); vnf.setVfcInstanceGroups(getVfcInstanceGroup(csarHelper, nodeTemplate)); - + if (ToscaNamingPolicy.getEcompNamingValueForNode(nodeTemplate, "nf_naming").equals("true")) { + setEcompNamingProperty(vnf.getProperties(), "true"); + } vnfsMaps.put(nodeTemplate.getName(), vnf); } return vnfsMaps; } - private Map getVfcInstanceGroup(ISdcCsarHelper csarHelper, NodeTemplate nodeTemplate) { - List vfcList = csarHelper.getGroupsOfOriginOfNodeTemplateByToscaGroupType(nodeTemplate, Constants.VFC_INSTANCE_GROUP_TYPE); + private Map getVfcInstanceGroup(ISdcCsarHelper csarHelper, NodeTemplate nodeTemplate) { + List vfcList = csarHelper.getGroupsOfOriginOfNodeTemplateByToscaGroupType(nodeTemplate, Constants.VFC_INSTANCE_GROUP_TYPE); return vfcList.stream() - .collect(toMap(Group::getName, group -> populateVfcInstanceGroupFromGroup(group, csarHelper, nodeTemplate))); + .collect(toMap(Group::getName, group -> populateVfcInstanceGroupFromGroup(group, nodeTemplate))); } - private VfcInstanceGroup populateVfcInstanceGroupFromGroup(Group group, ISdcCsarHelper csarHelper, NodeTemplate nodeTemplate) { - VfcInstanceGroup vfcInstanceGroup = new VfcInstanceGroup(); - vfcInstanceGroup.setUuid(group.getMetadata().getValue(Constants.UUID)); - vfcInstanceGroup.setInvariantUuid(group.getMetadata().getValue(Constants.INVARIANT_UUID)); - vfcInstanceGroup.setVersion(group.getMetadata().getValue(Constants.VERSION)); - vfcInstanceGroup.setName(group.getMetadata().getValue(Constants.NAME)); - vfcInstanceGroup.setVfcInstanceGroupProperties(getVfcPropertiesFromGroup(nodeTemplate, group)); + private VfcInstanceGroup populateVfcInstanceGroupFromGroup(Group group, NodeTemplate nodeTemplate) { + VfcInstanceGroup vfcInstanceGroup = new VfcInstanceGroup(); + vfcInstanceGroup.setUuid(group.getMetadata().getValue(Constants.UUID)); + vfcInstanceGroup.setInvariantUuid(group.getMetadata().getValue(Constants.INVARIANT_UUID)); + vfcInstanceGroup.setVersion(group.getMetadata().getValue(Constants.VERSION)); + vfcInstanceGroup.setName(group.getMetadata().getValue(Constants.NAME)); + vfcInstanceGroup.setVfcInstanceGroupProperties(getVfcPropertiesFromGroup(nodeTemplate, group)); return vfcInstanceGroup; @@ -209,24 +259,24 @@ public class ToscaParserImpl2 { vfcInstanceGroupProperties.setVfcParentPortRole((String) group.getProperties().get(Constants.VFC_PARENT_PORT_ROLE).getValue()); vfcInstanceGroupProperties.setSubinterfaceRole((String) group.getProperties().get(Constants.SUBINTERFACE_ROLE).getValue()); - String networkCollectionFunction = (String)((Map)(group.getProperties().get(Constants.NETWORK_COLLECTION_FUNCTION).getValue())).get(Constants.GET_INPUT); - String vfcInstanceGroupFunction = (String)((Map)(group.getProperties().get(Constants.VFC_INSTANCE_GROUP_FUNCTION).getValue())).get(Constants.GET_INPUT); + String networkCollectionFunction = (String) ((Map) (group.getProperties().get(Constants.NETWORK_COLLECTION_FUNCTION).getValue())).get(Constants.GET_INPUT); + String vfcInstanceGroupFunction = (String) ((Map) (group.getProperties().get(Constants.VFC_INSTANCE_GROUP_FUNCTION).getValue())).get(Constants.GET_INPUT); - if(nodeTemplate.getProperties().get(networkCollectionFunction) != null) + if ( nodeTemplate.getProperties().get(networkCollectionFunction) != null ) vfcInstanceGroupProperties.setNetworkCollectionFunction((String) nodeTemplate.getProperties().get(networkCollectionFunction).getValue()); - if(nodeTemplate.getProperties().get(vfcInstanceGroupFunction) != null) + if ( nodeTemplate.getProperties().get(vfcInstanceGroupFunction) != null ) vfcInstanceGroupProperties.setVfcInstanceGroupFunction((String) nodeTemplate.getProperties().get(vfcInstanceGroupFunction).getValue()); return vfcInstanceGroupProperties; } - private Map extractPortMirroringConfigFromCsar(ISdcCsarHelper csarHelper) { - List nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.CONFIGURATION); + private Map extractPortMirroringConfigFromCsar(ISdcCsarHelper csarHelper, List policiesTargets) { + List nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.CONFIGURATION);//TODO change to Map configMaps = new HashMap<>(); for (NodeTemplate nodeTemplate : nodeTemplates) { PortMirroringConfig pmConfig = new PortMirroringConfig(); - populateNodeFromNodeTemplate(nodeTemplate, csarHelper, pmConfig); + populateNodeFromNodeTemplate(nodeTemplate, csarHelper, pmConfig, policiesTargets); pmConfig.setModelCustomizationName(nodeTemplate.getName()); pmConfig.setRequirementAssignments(nodeTemplate.getRequirements()); @@ -236,38 +286,38 @@ public class ToscaParserImpl2 { } return configMaps; - } + } - private Map extractServiceProxyFromCsar(ISdcCsarHelper csarHelper) { + private Map extractServiceProxyFromCsar(ISdcCsarHelper csarHelper, List policiesTargets) { List nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.SERVICE_PROXY); - Map serviceProxies = new HashMap<>(); - for (NodeTemplate nodeTemplate: nodeTemplates) { - ServiceProxy serviceProxy = new ServiceProxy(); - populateNodeFromNodeTemplate(nodeTemplate, csarHelper, serviceProxy); + return nodeTemplates.stream() + .collect(toMap(NodeTemplate::getName, node -> getServiceProxyFromNodeTemplate(node, csarHelper, policiesTargets))); + } - Map metadata = nodeTemplate.getMetaData().getAllProperties(); - serviceProxy.setSourceModelUuid(metadata.get("sourceModelUuid")); - serviceProxy.setSourceModelInvariant(metadata.get("sourceModelInvariant")); - serviceProxy.setSourceModelName(metadata.get("sourceModelName")); + private ServiceProxy getServiceProxyFromNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, List policiesTargets) { + ServiceProxy serviceProxy = new ServiceProxy(); + populateNodeFromNodeTemplate(nodeTemplate, csarHelper, serviceProxy, policiesTargets); - serviceProxies.put(nodeTemplate.getName(), serviceProxy); - } + Map metadata = nodeTemplate.getMetaData().getAllProperties(); + serviceProxy.setSourceModelUuid(metadata.get("sourceModelUuid")); + serviceProxy.setSourceModelInvariant(metadata.get("sourceModelInvariant")); + serviceProxy.setSourceModelName(metadata.get("sourceModelName")); - return serviceProxies; + return serviceProxy; } - private void setSourceAndCollectorProxyNodes(ISdcCsarHelper csarHelper, PortMirroringConfig portMirroringConfig, NodeTemplate nodeTemplate) { - RequirementAssignments requirementAssignments = nodeTemplate.getRequirements(); + private void setSourceAndCollectorProxyNodes(ISdcCsarHelper csarHelper, PortMirroringConfig portMirroringConfig, NodeTemplate nodeTemplate) { + RequirementAssignments requirementAssignments = nodeTemplate.getRequirements(); List sourceNodes = getRequirementsNodesNames(requirementAssignments.getRequirementsByName("source").getAll()); portMirroringConfig.setSourceNodes(sourceNodes); List collectorNodes = getRequirementsNodesNames(requirementAssignments.getRequirementsByName("collector").getAll()); - if (!collectorNodes.isEmpty()) { // vprobe + if ( !collectorNodes.isEmpty() ) { // vprobe portMirroringConfig.setCollectorNodes(collectorNodes); } else { // pprobe - configuration by policy String collectorNodeName = csarHelper.getNodeTemplatePropertyLeafValue(nodeTemplate, "collector_node"); - if (collectorNodeName != null) { + if ( collectorNodeName != null ) { portMirroringConfig.setCollectorNodes(Arrays.asList(collectorNodeName)); portMirroringConfig.setConfigurationByPolicy(true); } @@ -277,8 +327,8 @@ public class ToscaParserImpl2 { private List getRequirementsNodesNames(List requirements) { List requirementsNodes = new ArrayList<>(); - if (requirements != null && requirements.size() > 0) { - requirementsNodes = requirements.stream().map(RequirementAssignment::getNodeTemplateName).collect(Collectors.toList()); + if ( !CollectionUtils.isEmpty(requirements) ) { + requirementsNodes = requirements.stream().map(RequirementAssignment::getNodeTemplateName).collect(toList()); } return requirementsNodes; @@ -301,26 +351,29 @@ public class ToscaParserImpl2 { return Boolean.valueOf(group.getPropertyValue(Constants.VOLUME_GROUP).toString()); } - private Map extractNetworksFromCsar(ISdcCsarHelper csarHelper) { + private Map extractNetworksFromCsar(ISdcCsarHelper csarHelper, List policiesTargets) { List nodeTemplates = csarHelper.getServiceVlList(); - Map networksMap = new HashMap(); + Map networksMap = new HashMap<>(); for (NodeTemplate nodeTemplate : nodeTemplates) { Network newNetwork = new Network(); - populateNodeFromNodeTemplate(nodeTemplate, csarHelper, newNetwork); + populateNodeFromNodeTemplate(nodeTemplate, csarHelper, newNetwork, policiesTargets); newNetwork.setModelCustomizationName(nodeTemplate.getName()); + if (ToscaNamingPolicy.getEcompNamingValueForNode(nodeTemplate, "exVL_naming").equals("true")) { + setEcompNamingProperty(newNetwork.getProperties(), "true"); + } networksMap.put(nodeTemplate.getName(), newNetwork); } return networksMap; - } + } - private Map extractPnfsFromCsar(ISdcCsarHelper csarHelper) { + private Map extractPnfsFromCsar(ISdcCsarHelper csarHelper, List policiesTargets) { List nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.PNF); HashMap pnfHashMap = new HashMap<>(); for (NodeTemplate nodeTemplate : nodeTemplates) { Node pnf = new Node(); - populateNodeFromNodeTemplate(nodeTemplate, csarHelper, pnf); + populateNodeFromNodeTemplate(nodeTemplate, csarHelper, pnf, policiesTargets); pnfHashMap.put(nodeTemplate.getName(), pnf); } return pnfHashMap; @@ -352,13 +405,13 @@ public class ToscaParserImpl2 { Map inputs = new HashMap<>(); for (org.onap.sdc.toscaparser.api.parameters.Input input : inputList) { //Set only inputs without annotation to the service level - if(input.getAnnotations() == null) + if ( input.getAnnotations() == null ) inputs.put(input.getName(), convertInput(input, new org.onap.vid.asdc.beans.tosca.Input(), null)); } return inputs; } - private Node populateNodeFromNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode) { + private Node populateNodeFromNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode, List policiesTargets) { newNode.setCustomizationUuid(csarHelper.getNodeTemplateCustomizationUuid(nodeTemplate)); newNode.setDescription(nodeTemplate.getMetaData().getValue(Constants.DESCRIPTION)); newNode.setInvariantUuid(nodeTemplate.getMetaData().getValue(Constants.INVARIANT_UUID)); @@ -367,19 +420,21 @@ public class ToscaParserImpl2 { newNode.setVersion(nodeTemplate.getMetaData().getValue(Constants.VERSION)); newNode.setInputs(extractInputsAndCommandsForNodeTemplate(nodeTemplate, csarHelper, newNode)); newNode.setType(nodeTemplate.getMetaData().getValue(Constants.TYPE)); - Map propertiesMap = setPropertiesOfVnf(nodeTemplate.getPropertiesObjects()); + Map propertiesMap = nodeTemplate.getPropertiesObjects().stream() + .collect(toMap(Property::getName, p -> p.getValue().toString())); + setEcompNamingProperty(propertiesMap, String.valueOf(policiesTargets.contains(nodeTemplate.getName()))); newNode.setProperties(propertiesMap); return newNode; } - private VfModule populateVfModuleFromGroup(Group group, ISdcCsarHelper csarHelper){ + private VfModule populateVfModuleFromGroup(Group group, ISdcCsarHelper csarHelper) { VfModule vfModule = new VfModule(); extractBasicPropertiesForGroup(vfModule, group, csarHelper); vfModule.setVolumeGroupAllowed(isVolumeGroup(group)); return vfModule; } - private VolumeGroup populateVolumeGroupFromGroup(Group group, ISdcCsarHelper csarHelper){ + private VolumeGroup populateVolumeGroupFromGroup(Group group, ISdcCsarHelper csarHelper) { VolumeGroup volumeGroup = new VolumeGroup(); extractBasicPropertiesForGroup(volumeGroup, group, csarHelper); return volumeGroup; @@ -398,30 +453,39 @@ public class ToscaParserImpl2 { } - private Map extractVfInputsFromCsarByAnnotation(ISdcCsarHelper csarHelper, org.onap.vid.model.Group group) { + private Map extractVfInputsFromCsarByAnnotation(ISdcCsarHelper csarHelper, org.onap.vid.model.Group group) { Map inputMap = new HashMap<>(); - if(group.getProperties().getVfModuleLabel() != null){ + if ( group.getProperties().getVfModuleLabel() != null ) { List inputsList = csarHelper.getInputsWithAnnotations(); - for(Input input: inputsList){ - if(input.getAnnotations() != null){ - List annotationProperties = input.getAnnotations().get("source").getProperties(); - if(isInputMatchesToGroup(annotationProperties, group)){ - inputMap.put(input.getName(), new org.onap.vid.asdc.beans.tosca.Input(input ,annotationProperties)); - } - } + for (Input input : inputsList) { + extractVfModuleInput(group, inputMap, input); } } return inputMap; } + private void extractVfModuleInput(org.onap.vid.model.Group group, Map inputMap, Input input) { + if ( input.getAnnotations() != null ) { + List annotationProperties = input.getAnnotations().get("source").getProperties(); + if ( isInputMatchesToGroup(annotationProperties, group) ) { + final org.onap.vid.asdc.beans.tosca.Input vfModuleInput = new org.onap.vid.asdc.beans.tosca.Input(input, annotationProperties); + if ( vfModuleInput.getInputProperties() != null && vfModuleInput.getInputProperties().getParamName() != null ) { + inputMap.put(vfModuleInput.getInputProperties().getParamName(), vfModuleInput); + } else { + inputMap.put(input.getName(), vfModuleInput); + } + } + } + } + - private boolean isInputMatchesToGroup(List annotationProperties, org.onap.vid.model.Group group){ - for(Property property: annotationProperties){ - if(property.getName().equals(VF_MODULE_LABEL)){ + private boolean isInputMatchesToGroup(List annotationProperties, org.onap.vid.model.Group group) { + for (Property property : annotationProperties) { + if ( property.getName().equals(VF_MODULE_LABEL) ) { final Object values = property.getValue(); final String vfModuleLabel = group.getProperties().getVfModuleLabel(); - if (values instanceof List) { - if (listContainsAsString((List) values, vfModuleLabel)) return true; + if ( values instanceof List ) { + if ( listContainsAsString((List) values, vfModuleLabel) ) return true; } else { return getPropertyValueAsString(property).equals(vfModuleLabel); } @@ -432,7 +496,7 @@ public class ToscaParserImpl2 { private boolean listContainsAsString(List list, String value) { for (Object v : list) { - if (StringUtils.equals(v.toString(), value)) { + if ( StringUtils.equals(v.toString(), value) ) { return true; } } @@ -443,37 +507,45 @@ public class ToscaParserImpl2 { return removeSquareBrackets(property.getValue().toString()); } - private String removeSquareBrackets(String stringWithSquareBrackets){ + private String removeSquareBrackets(String stringWithSquareBrackets) { return stringWithSquareBrackets.replaceAll("(^\\[|\\]$)", ""); } - private GroupProperties extractVfModuleProperties(Group group, ISdcCsarHelper csarHelper){ + private GroupProperties extractVfModuleProperties(Group group, ISdcCsarHelper csarHelper) { GroupProperties vfModuleProperties = new GroupProperties(); - if(csarHelper.getGroupPropertyAsObject(group, Constants.MIN_VF_MODULE_INSTANCES) != null) - vfModuleProperties.setMinCountInstances((Integer)csarHelper.getGroupPropertyAsObject(group, Constants.MIN_VF_MODULE_INSTANCES)); - if(csarHelper.getGroupPropertyAsObject(group, Constants.MAX_VF_MODULE_INSTANCES) != null) - vfModuleProperties.setMaxCountInstances((Integer)csarHelper.getGroupPropertyAsObject(group, Constants.MAX_VF_MODULE_INSTANCES)); - if(csarHelper.getGroupPropertyAsObject(group, Constants.INITIAL_COUNT) != null) - vfModuleProperties.setInitialCount((Integer)csarHelper.getGroupPropertyAsObject(group, Constants.INITIAL_COUNT)); - if(csarHelper.getGroupPropertyAsObject(group, VF_MODULE_LABEL) != null) + if ( csarHelper.getGroupPropertyAsObject(group, Constants.MIN_VF_MODULE_INSTANCES) != null ) + vfModuleProperties.setMinCountInstances((Integer) csarHelper.getGroupPropertyAsObject(group, Constants.MIN_VF_MODULE_INSTANCES)); + if ( csarHelper.getGroupPropertyAsObject(group, Constants.MAX_VF_MODULE_INSTANCES) != null ) + vfModuleProperties.setMaxCountInstances((Integer) csarHelper.getGroupPropertyAsObject(group, Constants.MAX_VF_MODULE_INSTANCES)); + if ( csarHelper.getGroupPropertyAsObject(group, Constants.INITIAL_COUNT) != null ) + vfModuleProperties.setInitialCount((Integer) csarHelper.getGroupPropertyAsObject(group, Constants.INITIAL_COUNT)); + if ( csarHelper.getGroupPropertyAsObject(group, VF_MODULE_LABEL) != null ) vfModuleProperties.setVfModuleLabel((String) csarHelper.getGroupPropertyAsObject(group, VF_MODULE_LABEL)); + vfModuleProperties.setBaseModule(isModuleTypeIsBaseObjectSafe(csarHelper.getGroupPropertyAsObject(group, Constants.VF_MODULE_TYPE))); return vfModuleProperties; } + public static boolean isModuleTypeIsBaseObjectSafe(Object vfModuleTypeValue) { + return (vfModuleTypeValue instanceof String) && (isModuleTypeIsBase((String) vfModuleTypeValue)); + } + + protected static boolean isModuleTypeIsBase(String vfModuleTypeValue) { + return "Base".equalsIgnoreCase(vfModuleTypeValue); + } - private Map extractInputsAndCommandsForNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode){ + private Map extractInputsAndCommandsForNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode) { Map inputMap = new HashMap<>(); Map commandPropertyMap = new HashMap<>(); List inputs = csarHelper.getServiceInputs(); - Map properties = csarHelper.filterNodeTemplatePropertiesByValue(nodeTemplate, FilterType.CONTAINS, Constants.GET_INPUT); + Map properties = csarHelper.filterNodeTemplatePropertiesByValue(nodeTemplate, FilterType.CONTAINS, Constants.GET_INPUT); for (Map.Entry property : properties.entrySet()) { String inputKey = property.getValue(); String key = extractInputValue(inputKey); - for (Input input: inputs){ - if(input.getName().equals(key)){ + for (Input input : inputs) { + if ( input.getName().equals(key) ) { org.onap.vid.asdc.beans.tosca.Input localInput = new org.onap.vid.asdc.beans.tosca.Input(); localInput = convertInput(input, localInput, nodeTemplate); String name = property.getKey(); @@ -487,7 +559,7 @@ public class ToscaParserImpl2 { } private String extractInputValue(String inputKey) { - return inputKey.substring(inputKey.indexOf(":") + 1); + return inputKey.substring(inputKey.indexOf(':') + 1); } private org.onap.vid.asdc.beans.tosca.Input convertInput(Input parserInput, org.onap.vid.asdc.beans.tosca.Input localInput, NodeTemplate nodeTemplate){ @@ -497,7 +569,7 @@ public class ToscaParserImpl2 { localInput.setType(parserInput.getType()); localInput.setConstraints(parserInput.getConstraints()); // localInput.setentry_schema() - + //if inputs of inner nodeTemplate - tell its details if(nodeTemplate != null) { Metadata metadata = nodeTemplate.getMetaData(); @@ -506,11 +578,11 @@ public class ToscaParserImpl2 { localInput.setTemplateInvariantUUID(metadata.getValue("invariantUUID")); localInput.setTemplateCustomizationUUID(metadata.getValue("customizationUUID")); } - + return localInput; } - private CommandProperty extractCommands(String displayName, String inputName){ + private CommandProperty extractCommands(String displayName, String inputName) { CommandProperty commandProperty = new CommandProperty(); commandProperty.setDisplayName(displayName); commandProperty.setCommand(Constants.GET_INPUT); @@ -518,19 +590,8 @@ public class ToscaParserImpl2 { return commandProperty; } - private Map setPropertiesOfVnf(List properties) { - Map propertiesMap = new HashMap(); - for (Property property : properties) { - //special handling to necessary sub-property "ecomp_generated_naming" - if(property.getName().equals("nf_naming")){ - final Object ecompGeneratedNaming = ((Map) (property.getValue())).get("ecomp_generated_naming"); - if (ecompGeneratedNaming != null) { - propertiesMap.put("ecomp_generated_naming", ecompGeneratedNaming.toString()); - } - } - propertiesMap.put(property.getName(), property.getValue().toString()); - } - return propertiesMap; + private void setEcompNamingProperty(Map propertiesMap, String isUserProvidingVnfNameOptional) { + propertiesMap.put(Constants.ECOMP_GENERATED_NAMING_PROPERTY, isUserProvidingVnfNameOptional); } private String validateInstantiationType(ISdcCsarHelper csarHelper){ @@ -545,5 +606,43 @@ public class ToscaParserImpl2 { return validatedInstantiationType; } + private Map extractVnfGroupsFromCsar(ISdcCsarHelper csarHelper, List policiesTargets) { + List resourceGroups = csarHelper.getGroupsOfTopologyTemplateByToscaGroupType(Constants.RESOURCE_GROUP_TYPE); + + return resourceGroups.stream() + .filter(group -> group.getProperties().get(Constants.RESOURCE_GROUP_CONTAINED_TYPE).getValue().equals("VF")) + .collect(toMap(Group::getName, group -> parseResourceGroup(group, csarHelper, policiesTargets))); + } + + private ResourceGroup parseResourceGroup(Group group, ISdcCsarHelper csarHelper, List policiesTargets) { + return new ResourceGroup( + Constants.VNF_GROUP, + group.getMetadata().getValue(Constants.INVARIANT_UUID), + group.getMetadata().getValue(Constants.UUID), + group.getMetadata().getValue(Constants.VERSION), + group.getMetadata().getValue(Constants.NAME), + group.getMetadata().getValue(Constants.NAME), + getPropertiesOfResourceGroup(group.getProperties(), policiesTargets.contains(group.getName())), + csarHelper.getGroupMembersFromTopologyTemplate(group.getName()).stream() + .collect(toMap(NodeTemplate::getName, node -> getServiceProxyFromNodeTemplate(node, csarHelper, policiesTargets))) + ); + } + + private Map getPropertiesOfResourceGroup(Map properties, boolean hasPolicyTarget) { + Map propertiesMap = properties.entrySet().stream() + .collect(toMap(Map.Entry::getKey, e -> e.getValue().getValue())); + propertiesMap.put(Constants.ECOMP_GENERATED_NAMING_PROPERTY, String.valueOf(hasPolicyTarget)); + return propertiesMap; + } + + public List extractNamingPoliciesTargets(ISdcCsarHelper csarHelper) { + List policies = csarHelper.getPoliciesOfTopologyTemplateByToscaPolicyType(Constants.NAMING_POLICY_TYPE); + return policies.stream() + .filter(policy -> policy.getProperties().get(Constants.TYPE) != null && + policy.getProperties().get(Constants.TYPE).getValue() != null && + StringUtils.equalsIgnoreCase(policy.getProperties().get(Constants.TYPE).getValue().toString(), "naming")) + .flatMap(policy -> policy.getTargets().stream()) + .collect(toList()); + } } \ No newline at end of file -- cgit 1.2.3-korg