Merge from ECOMP's repository
[vid.git] / vid-app-common / src / main / java / org / onap / vid / asdc / parser / ToscaParserImpl2.java
index 57d80ce..53ec403 100644 (file)
@@ -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<String> 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<String,CR> extractCRFromCsar(ISdcCsarHelper sdcCsarHelper) {
-           List<NodeTemplate> nodeTemplates = sdcCsarHelper.getServiceNodeTemplates();
-           Map<String, CR> collectionResourceMap = new HashMap<>();
+    private String isUserProvidingServiceNameOptional(ISdcCsarHelper csarHelper) {
+        return ToscaNamingPolicy.isUserProvidingServiceNameOptional(csarHelper);
+    }
+
+    private Map<String, CR> extractCRFromCsar(ISdcCsarHelper sdcCsarHelper, List<String> policiesTargets) {
+        List<NodeTemplate> nodeTemplates = sdcCsarHelper.getServiceNodeTemplates();
+        Map<String, CR> 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<String, Node> extractFabricConfigFromCsar(ISdcCsarHelper sdcCsarHelper, List<String> policiesTargets) {
+        List<NodeTemplate> nodeTemplates = sdcCsarHelper.getServiceNodeTemplates();
+        Map<String, Node> fabricConfiguration = new HashMap<>();
+
+        for (NodeTemplate nodeTemplate : nodeTemplates) {
+            List<NodeTemplate> 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<String> 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<String, NetworkCollection> getNetworksCollectionMapFromGroupsList(ISdcCsarHelper sdcCsarHelper, NodeTemplate nodeTemplate) {
         List<Group> groups = sdcCsarHelper.getGroupsOfOriginOfNodeTemplateByToscaGroupType(nodeTemplate, Constants.ORG_OPENECOMP_GROUPS_NETWORK_COLLECTION);
-        Map<String, NetworkCollection> networksCollectionMap = new HashMap<String, NetworkCollection>();
-        for(Group group: groups){
+        Map<String, NetworkCollection> networksCollectionMap = new HashMap<>();
+        for (Group group : groups) {
             networksCollectionMap.put(group.getName(), populateCollectionNetworkFromGroup(group, nodeTemplate));
         }
         return networksCollectionMap;
@@ -161,44 +209,46 @@ public class ToscaParserImpl2 {
         LinkedHashMap<String, Property> properties = group.getProperties();
         Map<String, Property> 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<String, VNF> extractVnfsFromCsar(ISdcCsarHelper csarHelper) {
+    private Map<String, VNF> extractVnfsFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
         List<NodeTemplate> nodeTemplates = csarHelper.getServiceVfList();
-        Map<String, VNF> vnfsMaps = new HashMap<String, VNF>();
+        Map<String, VNF> 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<String,VfcInstanceGroup> getVfcInstanceGroup(ISdcCsarHelper csarHelper, NodeTemplate nodeTemplate) {
-           List<Group> vfcList = csarHelper.getGroupsOfOriginOfNodeTemplateByToscaGroupType(nodeTemplate, Constants.VFC_INSTANCE_GROUP_TYPE);
+    private Map<String, VfcInstanceGroup> getVfcInstanceGroup(ISdcCsarHelper csarHelper, NodeTemplate nodeTemplate) {
+        List<Group> 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<String, PortMirroringConfig> extractPortMirroringConfigFromCsar(ISdcCsarHelper csarHelper) {
-        List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.CONFIGURATION);
+    private Map<String, PortMirroringConfig> extractPortMirroringConfigFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
+        List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.CONFIGURATION);//TODO change to
         Map<String, PortMirroringConfig> 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<String, ServiceProxy> extractServiceProxyFromCsar(ISdcCsarHelper csarHelper) {
+    private Map<String, ServiceProxy> extractServiceProxyFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
         List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.SERVICE_PROXY);
-        Map<String, ServiceProxy> 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<String, String> 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<String> policiesTargets) {
+        ServiceProxy serviceProxy = new ServiceProxy();
+        populateNodeFromNodeTemplate(nodeTemplate, csarHelper, serviceProxy, policiesTargets);
 
-            serviceProxies.put(nodeTemplate.getName(), serviceProxy);
-        }
+        Map<String, String> 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<String> sourceNodes = getRequirementsNodesNames(requirementAssignments.getRequirementsByName("source").getAll());
         portMirroringConfig.setSourceNodes(sourceNodes);
 
         List<String> 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<String> getRequirementsNodesNames(List<RequirementAssignment> requirements) {
 
         List<String> 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<String, Network> extractNetworksFromCsar(ISdcCsarHelper csarHelper) {
+    private Map<String, Network> extractNetworksFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
         List<NodeTemplate> nodeTemplates = csarHelper.getServiceVlList();
-        Map<String, Network> networksMap = new HashMap<String, Network>();
+        Map<String, Network> 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<String,Node> extractPnfsFromCsar(ISdcCsarHelper csarHelper) {
+    private Map<String, Node> extractPnfsFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
         List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.PNF);
         HashMap<String, Node> 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<String, org.onap.vid.asdc.beans.tosca.Input> 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<String> 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<String, String> propertiesMap = setPropertiesOfVnf(nodeTemplate.getPropertiesObjects());
+        Map<String, String> 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<String,org.onap.vid.asdc.beans.tosca.Input> extractVfInputsFromCsarByAnnotation(ISdcCsarHelper csarHelper, org.onap.vid.model.Group group) {
+    private Map<String, org.onap.vid.asdc.beans.tosca.Input> extractVfInputsFromCsarByAnnotation(ISdcCsarHelper csarHelper, org.onap.vid.model.Group group) {
         Map<String, org.onap.vid.asdc.beans.tosca.Input> inputMap = new HashMap<>();
-        if(group.getProperties().getVfModuleLabel() != null){
+        if ( group.getProperties().getVfModuleLabel() != null ) {
             List<Input> inputsList = csarHelper.getInputsWithAnnotations();
-            for(Input input: inputsList){
-                if(input.getAnnotations() != null){
-                    List<Property> 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<String, org.onap.vid.asdc.beans.tosca.Input> inputMap, Input input) {
+        if ( input.getAnnotations() != null ) {
+            List<Property> 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<Property> annotationProperties, org.onap.vid.model.Group group){
-        for(Property property: annotationProperties){
-            if(property.getName().equals(VF_MODULE_LABEL)){
+    private boolean isInputMatchesToGroup(List<Property> 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<String, org.onap.vid.asdc.beans.tosca.Input> extractInputsAndCommandsForNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode){
+    private Map<String, org.onap.vid.asdc.beans.tosca.Input> extractInputsAndCommandsForNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode) {
         Map<String, org.onap.vid.asdc.beans.tosca.Input> inputMap = new HashMap<>();
         Map<String, CommandProperty> commandPropertyMap = new HashMap<>();
 
         List<Input> inputs = csarHelper.getServiceInputs();
-        Map<String, String> properties  = csarHelper.filterNodeTemplatePropertiesByValue(nodeTemplate, FilterType.CONTAINS, Constants.GET_INPUT);
+        Map<String, String> properties = csarHelper.filterNodeTemplatePropertiesByValue(nodeTemplate, FilterType.CONTAINS, Constants.GET_INPUT);
         for (Map.Entry<String, String> 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<String, String> setPropertiesOfVnf(List<Property> properties) {
-        Map<String, String> propertiesMap = new HashMap<String, String>();
-        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<String, String> 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<String, ResourceGroup> extractVnfGroupsFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
+        List<Group> 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<String> 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<String, Object> getPropertiesOfResourceGroup(Map<String, Property> properties, boolean hasPolicyTarget) {
+        Map<String, Object> 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<String> extractNamingPoliciesTargets(ISdcCsarHelper csarHelper) {
+        List<Policy> 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