2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.vid.asdc.parser;
23 import org.apache.commons.collections.CollectionUtils;
24 import org.apache.commons.lang3.StringUtils;
25 import org.apache.commons.lang3.tuple.Pair;
26 import org.jetbrains.annotations.Nullable;
27 import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
28 import org.onap.sdc.tosca.parser.enums.FilterType;
29 import org.onap.sdc.tosca.parser.enums.SdcTypes;
30 import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
31 import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
32 import org.onap.sdc.toscaparser.api.Group;
33 import org.onap.sdc.toscaparser.api.*;
34 import org.onap.sdc.toscaparser.api.parameters.Input;
35 import org.onap.vid.asdc.beans.Service;
36 import org.onap.vid.model.*;
38 import java.nio.file.Path;
41 import static java.util.stream.Collectors.toList;
42 import static java.util.stream.Collectors.toMap;
43 import static org.onap.vid.asdc.parser.ToscaParserImpl2.Constants.VF_MODULE_LABEL;
45 public class ToscaParserImpl2 {
48 private final VidNotionsBuilder vidNotionsBuilder;
50 public class Constants {
51 public static final String UUID = "UUID";
52 public static final String DESCRIPTION = "description";
53 public static final String SERVICE_TYPE = "serviceType";
54 public static final String SERVICE_ROLE = "serviceRole";
55 public static final String ECOMP_GENERATED_NAMING = "ecompGeneratedNaming";
57 public static final String CUSTOMIZATION_UUID = "customizationUUID";
58 public static final String VF_MODULE_MODEL_VERSION = "vfModuleModelVersion";
59 public static final String VF_MODULE_MODEL_CUSTOMIZATION_UUID = "vfModuleModelCustomizationUUID";
60 public static final String VOLUME_GROUP = "volume_group";
61 public static final String VF_MODULE_MODEL_INVARIANT_UUID = "vfModuleModelInvariantUUID";
62 public static final String VF_MODULE_MODEL_UUID = "vfModuleModelUUID";
63 public static final String INVARIANT_UUID = "invariantUUID";
64 public static final String VERSION = "version";
65 public static final String NAME = "name";
66 public static final String CATEGORY = "category";
67 public static final String VF_MODULE_MODEL_NAME = "vfModuleModelName";
68 public static final String GET_INPUT = "get_input";
69 public static final String TYPE = "type";
70 public static final String QUANTITY = "quantity";
72 public static final String INSTANTIATION_TYPE = "instantiationType";
74 public static final String BOTH = "Both";
75 public static final String MACRO = "Macro";
76 public static final String A_LA_CARTE = "A-La-Carte";
77 public static final String CLIENT_CONFIG = "ClientConfig";
80 public static final String GROUPING = "GROUPING";
83 public static final String MIN_VF_MODULE_INSTANCES = "min_vf_module_instances";
84 public static final String MAX_VF_MODULE_INSTANCES = "max_vf_module_instances";
85 public static final String INITIAL_COUNT = "initial_count";
86 public static final String VF_MODULE_LABEL = "vf_module_label";
87 public static final String VF_MODULE_TYPE = "vf_module_type";
89 //collection resource properties
90 public static final String SUBCATEGORY = "subcategory";
91 public static final String RESOURCE_VENDOR = "resourceVendor";
92 public static final String RESOURCE_VENDOR_RELEASE = "resourceVendorRelease";
93 public static final String RESOURCE_VENDOR_MODEL_NUMBER = "resourceVendorModelNumber";
94 public static final String ORG_OPENECOMP_GROUPS_NETWORK_COLLECTION = "org.openecomp.groups.NetworkCollection";
95 public static final String NETWORK_COLLECTION_FUNCTION = "network_collection_function";
96 public static final String NETWORK_COLLECTION_DESCRIPTION = "network_collection_description";
98 //vfc instance group properties
99 public static final String VFC_INSTANCE_GROUP_TYPE = "org.openecomp.groups.VfcInstanceGroup";
100 public static final String VFC_PARENT_PORT_ROLE = "vfc_parent_port_role";
101 public static final String SUBINTERFACE_ROLE = "subinterface_role";
102 public static final String VFC_INSTANCE_GROUP_FUNCTION = "vfc_instance_group_function";
104 public static final String FABRIC_CONFIGURATION_TYPE = "org.openecomp.nodes.FabricConfiguration";
106 public static final String RESOURCE_GROUP_TYPE = "org.openecomp.groups.ResourceInstanceGroup";
107 public static final String RESOURCE_GROUP_CONTAINED_TYPE = "contained_resource_type";
109 public static final String VNF_GROUP = "VnfGroup";
111 public static final String VRF_NODE_TYPE = "org.openecomp.nodes.VRFEntry";
113 public static final String PORT_MIRRORING_CONFIGURATION_NODE_TYPE = "org.openecomp.nodes.PortMirroringConfiguration";
115 public static final String PORT_MIRRORING_CONFIGURATION_BY_POLICY_NODE_TYPE = "org.openecomp.nodes.PortMirroringConfigurationByPolicy";
117 public static final String NAMING_POLICY_TYPE = "org.openecomp.policies.External";
119 public static final String SCALING_POLICY_TYPE = "org.openecomp.policies.scaling.Fixed";
121 public static final String ECOMP_GENERATED_NAMING_PROPERTY = "ecomp_generated_naming";
124 public ToscaParserImpl2(VidNotionsBuilder vidNotionsBuilder) {
125 this.vidNotionsBuilder = vidNotionsBuilder;
128 public ServiceModel makeServiceModel(Path path, Service asdcServiceMetadata) throws SdcToscaParserException {
129 ServiceModel serviceModel = new ServiceModel();
130 ISdcCsarHelper sdcCsarHelper = getSdcCsarHelper(path);
131 List<String> policiesTargets = extractNamingPoliciesTargets(sdcCsarHelper);
132 Map<String, Integer> scalingPolicies = extractScalingPolicyOfGroup(sdcCsarHelper);
134 serviceModel.setService(extractServiceFromCsar(asdcServiceMetadata, sdcCsarHelper));
135 serviceModel.setVolumeGroups(extractVolumeGroups(sdcCsarHelper));
136 serviceModel.setVfModules(extractVfModuleFromCsar(sdcCsarHelper));
137 serviceModel.setVnfs(extractVnfsFromCsar(sdcCsarHelper, policiesTargets));
138 serviceModel.setConfigurations(extractPortMirroringConfigFromCsar(sdcCsarHelper, policiesTargets));
139 serviceModel.setServiceProxies(extractServiceProxyFromCsar(sdcCsarHelper, policiesTargets));
140 serviceModel.setNetworks(extractNetworksFromCsar(sdcCsarHelper, policiesTargets));
141 serviceModel.setPnfs(extractPnfsFromCsar(sdcCsarHelper, policiesTargets));
142 serviceModel.setCollectionResources(extractCRFromCsar(sdcCsarHelper, policiesTargets));
143 serviceModel.setFabricConfigurations(extractFabricConfigFromCsar(sdcCsarHelper, policiesTargets));
144 serviceModel.setVnfGroups(extractVnfGroupsFromCsar(sdcCsarHelper, policiesTargets, scalingPolicies));
145 serviceModel.setVrfs(extractVrfsFromCsar(sdcCsarHelper, policiesTargets));
146 serviceModel.getService().setVidNotions(vidNotionsBuilder.buildVidNotions(sdcCsarHelper, serviceModel));
150 public ISdcCsarHelper getSdcCsarHelper(Path path) throws SdcToscaParserException {
151 SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance();
152 return factory.getSdcCsarHelper(path.toFile().getAbsolutePath(), false);
155 private org.onap.vid.model.Service extractServiceFromCsar(Service asdcServiceMetadata, ISdcCsarHelper csarHelper) {
156 org.onap.vid.model.Service service = new org.onap.vid.model.Service();
158 service.setName(csarHelper.getServiceMetadata().getValue(Constants.NAME));
159 service.setCategory(csarHelper.getServiceMetadata().getValue(Constants.CATEGORY));
160 service.setInvariantUuid(csarHelper.getServiceMetadata().getValue(Constants.INVARIANT_UUID));
161 service.setUuid(csarHelper.getServiceMetadata().getValue(Constants.UUID));
162 service.setVersion(asdcServiceMetadata.getVersion());
163 service.setDescription(csarHelper.getServiceMetadata().getValue(Constants.DESCRIPTION));
164 service.setInputs(inputsListToInputsMap(csarHelper.getInputsWithAnnotations()));
165 service.setServiceEcompNaming(isUserProvidingServiceNameOptional(csarHelper));
166 service.setServiceType(csarHelper.getServiceMetadata().getValue(Constants.SERVICE_TYPE));
167 service.setServiceRole(csarHelper.getServiceMetadata().getValue(Constants.SERVICE_ROLE));
168 service.setInstantiationType(validateInstantiationType(csarHelper));
172 private String isUserProvidingServiceNameOptional(ISdcCsarHelper csarHelper) {
173 return ToscaNamingPolicy.isUserProvidingServiceNameOptional(csarHelper);
176 private Map<String, CR> extractCRFromCsar(ISdcCsarHelper sdcCsarHelper, List<String> policiesTargets) {
177 List<NodeTemplate> nodeTemplates = sdcCsarHelper.getServiceNodeTemplates();
178 Map<String, CR> collectionResourceMap = new HashMap<>();
180 for (NodeTemplate nodeTemplate : nodeTemplates) {
181 if ( nodeTemplate.getMetaData().getValue(Constants.TYPE).equals(SdcTypes.CR.getValue()) ) {
183 populateCrFromNodeTemplate(nodeTemplate, sdcCsarHelper, cr, policiesTargets);
184 collectionResourceMap.put(nodeTemplate.getName(), cr);
188 return collectionResourceMap;
191 private Map<String, Node> extractFabricConfigFromCsar(ISdcCsarHelper sdcCsarHelper, List<String> policiesTargets) {
192 List<NodeTemplate> nodeTemplates = sdcCsarHelper.getServiceNodeTemplates();
193 Map<String, Node> fabricConfiguration = new HashMap<>();
195 for (NodeTemplate nodeTemplate : nodeTemplates) {
196 List<NodeTemplate> nodeTemplateChildren = sdcCsarHelper.getNodeTemplateChildren(nodeTemplate);
197 for (NodeTemplate nodeTemplateChild : nodeTemplateChildren) {
198 if ( nodeTemplateChild.getType().equals(Constants.FABRIC_CONFIGURATION_TYPE) ) {
199 Node node = new Node();
200 fabricConfiguration.put(nodeTemplateChild.getName(), populateNodeFromNodeTemplate(nodeTemplateChild, sdcCsarHelper, node, policiesTargets));
205 return fabricConfiguration;
209 private void populateCrFromNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper sdcCsarHelper, CR cr, List<String> policiesTargets) {
210 populateNodeFromNodeTemplate(nodeTemplate, sdcCsarHelper, cr, policiesTargets);
211 cr.setCustomizationUUID(nodeTemplate.getMetaData().getValue(Constants.CUSTOMIZATION_UUID));
212 cr.setCategory(nodeTemplate.getMetaData().getValue(Constants.CATEGORY));
213 cr.setSubcategory(nodeTemplate.getMetaData().getValue(Constants.SUBCATEGORY));
214 cr.setResourceVendor(nodeTemplate.getMetaData().getValue(Constants.RESOURCE_VENDOR));
215 cr.setResourceVendorRelease(nodeTemplate.getMetaData().getValue(Constants.RESOURCE_VENDOR_RELEASE));
216 cr.setResourceVendorModelNumber(nodeTemplate.getMetaData().getValue(Constants.RESOURCE_VENDOR_MODEL_NUMBER));
217 cr.setNetworksCollection(getNetworksCollectionMapFromGroupsList(sdcCsarHelper, nodeTemplate));
220 private Map<String, NetworkCollection> getNetworksCollectionMapFromGroupsList(ISdcCsarHelper sdcCsarHelper, NodeTemplate nodeTemplate) {
221 List<Group> groups = sdcCsarHelper.getGroupsOfOriginOfNodeTemplateByToscaGroupType(nodeTemplate, Constants.ORG_OPENECOMP_GROUPS_NETWORK_COLLECTION);
222 Map<String, NetworkCollection> networksCollectionMap = new HashMap<>();
223 for (Group group : groups) {
224 networksCollectionMap.put(group.getName(), populateCollectionNetworkFromGroup(group, nodeTemplate));
226 return networksCollectionMap;
229 private NetworkCollection populateCollectionNetworkFromGroup(Group group, NodeTemplate nodeTemplate) {
230 NetworkCollection networkCollection = new NetworkCollection();
231 networkCollection.setUuid(group.getMetadata().getValue(Constants.UUID));
232 networkCollection.setInvariantUuid(group.getMetadata().getValue(Constants.INVARIANT_UUID));
233 networkCollection.setVersion(group.getMetadata().getValue(Constants.VERSION));
234 networkCollection.setName(group.getMetadata().getValue(Constants.NAME));
235 extractPropertiesOfCollectionNetworkFromCsar(group, nodeTemplate, networkCollection);
237 return networkCollection;
240 private void extractPropertiesOfCollectionNetworkFromCsar(Group group, NodeTemplate nodeTemplate, NetworkCollection networkCollection) {
241 LinkedHashMap<String, Property> properties = group.getProperties();
242 Map<String, Property> nodeTemplateProperties = nodeTemplate.getProperties();
244 String networkCollectionFunction = (String) ((Map) (properties.get(Constants.NETWORK_COLLECTION_FUNCTION).getValue())).get(Constants.GET_INPUT);
245 String networkCollectionDescription = (String) ((Map) (properties.get(Constants.NETWORK_COLLECTION_DESCRIPTION).getValue())).get(Constants.GET_INPUT);
247 networkCollection.getNetworkCollectionProperties().setNetworkCollectionDescription((String) nodeTemplateProperties.get(networkCollectionDescription).getValue());
248 networkCollection.getNetworkCollectionProperties().setNetworkCollectionFunction((String) nodeTemplateProperties.get(networkCollectionFunction).getValue());
252 private Map<String, VNF> extractVnfsFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
253 List<NodeTemplate> nodeTemplates = csarHelper.getServiceVfList();
254 Map<String, VNF> vnfsMaps = new HashMap<>();
256 for (NodeTemplate nodeTemplate : nodeTemplates) {
258 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, vnf, policiesTargets);
259 vnf.setModelCustomizationName(nodeTemplate.getName());
260 vnf.setVfModules(getVfModulesFromVF(csarHelper, vnf.getCustomizationUuid()));
261 vnf.setVolumeGroups(getVolumeGroupsFromVF(csarHelper, vnf.getCustomizationUuid()));
262 vnf.setVfcInstanceGroups(getVfcInstanceGroup(csarHelper, nodeTemplate));
263 if ("true".equals(ToscaNamingPolicy.getEcompNamingValueForNode(nodeTemplate, "nf_naming"))) {
264 setEcompNamingProperty(vnf.getProperties(), "true");
266 vnfsMaps.put(nodeTemplate.getName(), vnf);
271 private Map<String, VfcInstanceGroup> getVfcInstanceGroup(ISdcCsarHelper csarHelper, NodeTemplate nodeTemplate) {
272 List<Group> vfcList = csarHelper.getGroupsOfOriginOfNodeTemplateByToscaGroupType(nodeTemplate, Constants.VFC_INSTANCE_GROUP_TYPE);
273 return vfcList.stream()
274 .collect(toMap(Group::getName, group -> populateVfcInstanceGroupFromGroup(group, nodeTemplate)));
277 private VfcInstanceGroup populateVfcInstanceGroupFromGroup(Group group, NodeTemplate nodeTemplate) {
278 VfcInstanceGroup vfcInstanceGroup = new VfcInstanceGroup();
279 vfcInstanceGroup.setUuid(group.getMetadata().getValue(Constants.UUID));
280 vfcInstanceGroup.setInvariantUuid(group.getMetadata().getValue(Constants.INVARIANT_UUID));
281 vfcInstanceGroup.setVersion(group.getMetadata().getValue(Constants.VERSION));
282 vfcInstanceGroup.setName(group.getMetadata().getValue(Constants.NAME));
283 vfcInstanceGroup.setVfcInstanceGroupProperties(getVfcPropertiesFromGroup(nodeTemplate, group));
285 return vfcInstanceGroup;
289 private VfcInstanceGroupProperties getVfcPropertiesFromGroup(NodeTemplate nodeTemplate, Group group) {
290 VfcInstanceGroupProperties vfcInstanceGroupProperties = new VfcInstanceGroupProperties();
291 vfcInstanceGroupProperties.setVfcParentPortRole((String) group.getProperties().get(Constants.VFC_PARENT_PORT_ROLE).getValue());
292 vfcInstanceGroupProperties.setSubinterfaceRole((String) group.getProperties().get(Constants.SUBINTERFACE_ROLE).getValue());
294 String networkCollectionFunction = (String) ((Map) (group.getProperties().get(Constants.NETWORK_COLLECTION_FUNCTION).getValue())).get(Constants.GET_INPUT);
295 String vfcInstanceGroupFunction = (String) ((Map) (group.getProperties().get(Constants.VFC_INSTANCE_GROUP_FUNCTION).getValue())).get(Constants.GET_INPUT);
297 if ( nodeTemplate.getProperties().get(networkCollectionFunction) != null )
298 vfcInstanceGroupProperties.setNetworkCollectionFunction((String) nodeTemplate.getProperties().get(networkCollectionFunction).getValue());
299 if ( nodeTemplate.getProperties().get(vfcInstanceGroupFunction) != null )
300 vfcInstanceGroupProperties.setVfcInstanceGroupFunction((String) nodeTemplate.getProperties().get(vfcInstanceGroupFunction).getValue());
302 return vfcInstanceGroupProperties;
305 private Map<String, PortMirroringConfig> extractPortMirroringConfigFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
306 List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplatesByType(Constants.PORT_MIRRORING_CONFIGURATION_NODE_TYPE);
307 nodeTemplates.addAll(csarHelper.getServiceNodeTemplatesByType(Constants.PORT_MIRRORING_CONFIGURATION_BY_POLICY_NODE_TYPE));
308 Map<String, PortMirroringConfig> configMaps = new HashMap<>();
310 for (NodeTemplate nodeTemplate : nodeTemplates) {
311 PortMirroringConfig pmConfig = new PortMirroringConfig();
312 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, pmConfig, policiesTargets);
314 pmConfig.setModelCustomizationName(nodeTemplate.getName());
315 pmConfig.setRequirementAssignments(nodeTemplate.getRequirements());
316 setSourceAndCollectorProxyNodes(csarHelper, pmConfig, nodeTemplate);
318 configMaps.put(nodeTemplate.getName(), pmConfig);
324 private Map<String, ServiceProxy> extractServiceProxyFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
325 List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.SERVICE_PROXY);
326 return nodeTemplates.stream()
327 .collect(toMap(NodeTemplate::getName, node -> getServiceProxyFromNodeTemplate(node, csarHelper, policiesTargets)));
330 private ServiceProxy getServiceProxyFromNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, List<String> policiesTargets) {
331 ServiceProxy serviceProxy = new ServiceProxy();
332 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, serviceProxy, policiesTargets);
334 Map<String, String> metadata = nodeTemplate.getMetaData().getAllProperties();
335 serviceProxy.setSourceModelUuid(metadata.get("sourceModelUuid"));
336 serviceProxy.setSourceModelInvariant(metadata.get("sourceModelInvariant"));
337 serviceProxy.setSourceModelName(metadata.get("sourceModelName"));
342 private void setSourceAndCollectorProxyNodes(ISdcCsarHelper csarHelper, PortMirroringConfig portMirroringConfig, NodeTemplate nodeTemplate) {
343 RequirementAssignments requirementAssignments = nodeTemplate.getRequirements();
345 List<String> sourceNodes = getRequirementsNodesNames(requirementAssignments.getRequirementsByName("source").getAll());
346 portMirroringConfig.setSourceNodes(sourceNodes);
348 List<String> collectorNodes = getRequirementsNodesNames(requirementAssignments.getRequirementsByName("collector").getAll());
349 if ( !collectorNodes.isEmpty() ) { // vprobe
350 portMirroringConfig.setCollectorNodes(collectorNodes);
351 } else { // pprobe - configuration by policy
352 String collectorNodeName = csarHelper.getNodeTemplatePropertyLeafValue(nodeTemplate, "collector_node");
353 if ( collectorNodeName != null ) {
354 portMirroringConfig.setCollectorNodes(Arrays.asList(collectorNodeName));
355 portMirroringConfig.setConfigurationByPolicy(true);
360 private List<String> getRequirementsNodesNames(List<RequirementAssignment> requirements) {
362 List<String> requirementsNodes = new ArrayList<>();
363 if ( !CollectionUtils.isEmpty(requirements) ) {
364 requirementsNodes = requirements.stream().map(RequirementAssignment::getNodeTemplateName).collect(toList());
367 return requirementsNodes;
370 Map<String, VfModule> getVfModulesFromVF(ISdcCsarHelper csarHelper, String vfUuid) {
371 List<Group> vfModulesByVf = csarHelper.getVfModulesByVf(vfUuid);
372 return vfModulesByVf.stream()
373 .collect(toMap(Group::getName, group -> populateVfModuleFromGroup(group, csarHelper)));
376 Map<String, VolumeGroup> getVolumeGroupsFromVF(ISdcCsarHelper csarHelper, String vfCustomizationUuid) {
377 List<Group> vfModulesByVf = csarHelper.getVfModulesByVf(vfCustomizationUuid);
378 return vfModulesByVf.stream()
379 .filter((group -> isVolumeGroup(group)))
380 .collect(toMap(Group::getName, group -> populateVolumeGroupFromGroup(group, csarHelper)));
383 private static Boolean isVolumeGroup(Group group) {
384 return Boolean.valueOf(group.getPropertyValue(Constants.VOLUME_GROUP).toString());
387 private Map<String, Network> extractNetworksFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
388 List<NodeTemplate> nodeTemplates = csarHelper.getServiceVlList();
389 Map<String, Network> networksMap = new HashMap<>();
391 for (NodeTemplate nodeTemplate : nodeTemplates) {
392 Network newNetwork = new Network();
393 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, newNetwork, policiesTargets);
394 newNetwork.setModelCustomizationName(nodeTemplate.getName());
395 if ("true".equals(ToscaNamingPolicy.getEcompNamingValueForNode(nodeTemplate, "exVL_naming"))) {
396 setEcompNamingProperty(newNetwork.getProperties(), "true");
398 networksMap.put(nodeTemplate.getName(), newNetwork);
403 private Map<String, Node> extractPnfsFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
404 List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.PNF);
405 return this.extractNodesFromCsar(csarHelper,policiesTargets,nodeTemplates);
408 private Map<String, VfModule> extractVfModuleFromCsar(ISdcCsarHelper csarHelper) {
409 List<NodeTemplate> serviceVfList = csarHelper.getServiceVfList();
410 HashMap<String, VfModule> vfModuleHashMap = new HashMap<>();
412 for (NodeTemplate nodeTemplate : serviceVfList) {
413 Map<String, VfModule> nodeTemplateVfModule =
414 getVfModulesFromVF(csarHelper, nodeTemplate.getMetaData().getValue(Constants.CUSTOMIZATION_UUID));
415 vfModuleHashMap.putAll(nodeTemplateVfModule);
417 return vfModuleHashMap;
420 private Map<String, VolumeGroup> extractVolumeGroups(ISdcCsarHelper csarHelper) {
421 HashMap<String, VolumeGroup> volumeGroupHashMap = new HashMap<>();
422 for (NodeTemplate nodeTemplate : csarHelper.getServiceVfList()) {
423 Map<String, VolumeGroup> nodeTemplateVolumeGroups =
424 getVolumeGroupsFromVF(csarHelper, csarHelper.getNodeTemplateCustomizationUuid(nodeTemplate));
425 volumeGroupHashMap.putAll(nodeTemplateVolumeGroups);
427 return volumeGroupHashMap;
430 private Map<String, org.onap.vid.asdc.beans.tosca.Input> inputsListToInputsMap(List<org.onap.sdc.toscaparser.api.parameters.Input> inputList) {
431 Map<String, org.onap.vid.asdc.beans.tosca.Input> inputs = new HashMap<>();
432 for (org.onap.sdc.toscaparser.api.parameters.Input input : inputList) {
433 //Set only inputs without annotation to the service level
434 if ( input.getAnnotations() == null )
435 inputs.put(input.getName(), convertInput(input, new org.onap.vid.asdc.beans.tosca.Input()));
440 private Node populateNodeFromNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode, List<String> policiesTargets) {
441 newNode.setCustomizationUuid(csarHelper.getNodeTemplateCustomizationUuid(nodeTemplate));
442 newNode.setDescription(nodeTemplate.getMetaData().getValue(Constants.DESCRIPTION));
443 newNode.setInvariantUuid(nodeTemplate.getMetaData().getValue(Constants.INVARIANT_UUID));
444 newNode.setUuid(nodeTemplate.getMetaData().getValue(Constants.UUID));
445 newNode.setName(nodeTemplate.getMetaData().getValue(Constants.NAME));
446 newNode.setVersion(nodeTemplate.getMetaData().getValue(Constants.VERSION));
447 newNode.setInputs(extractInputsAndCommandsForNodeTemplate(nodeTemplate, csarHelper, newNode));
448 newNode.setType(nodeTemplate.getMetaData().getValue(Constants.TYPE));
449 Map<String, String> propertiesMap = nodeTemplate.getPropertiesObjects().stream()
450 .collect(toMap(Property::getName, p -> p.getValue().toString()));
451 setEcompNamingProperty(propertiesMap, String.valueOf(policiesTargets.contains(nodeTemplate.getName())));
452 newNode.setProperties(propertiesMap);
456 private VfModule populateVfModuleFromGroup(Group group, ISdcCsarHelper csarHelper) {
457 VfModule vfModule = new VfModule();
458 extractBasicPropertiesForGroup(vfModule, group, csarHelper);
459 vfModule.setVolumeGroupAllowed(isVolumeGroup(group));
463 private VolumeGroup populateVolumeGroupFromGroup(Group group, ISdcCsarHelper csarHelper) {
464 VolumeGroup volumeGroup = new VolumeGroup();
465 extractBasicPropertiesForGroup(volumeGroup, group, csarHelper);
469 private void extractBasicPropertiesForGroup(org.onap.vid.model.Group newGroup, Group group, ISdcCsarHelper csarHelper) {
470 newGroup.setDescription(group.getDescription());
471 newGroup.setVersion(group.getMetadata().getValue(Constants.VF_MODULE_MODEL_VERSION));
472 newGroup.setCustomizationUuid(group.getMetadata().getValue(Constants.VF_MODULE_MODEL_CUSTOMIZATION_UUID));
473 newGroup.setModelCustomizationName(group.getMetadata().getValue(Constants.VF_MODULE_MODEL_NAME));
474 newGroup.setName(group.getMetadata().getValue(Constants.VF_MODULE_MODEL_NAME));
475 newGroup.setUuid(group.getMetadata().getValue(Constants.VF_MODULE_MODEL_UUID));
476 newGroup.setInvariantUuid(group.getMetadata().getValue(Constants.VF_MODULE_MODEL_INVARIANT_UUID));
477 newGroup.setProperties(extractVfModuleProperties(group, csarHelper));
478 newGroup.setInputs(extractVfInputsFromCsarByAnnotation(csarHelper, newGroup));
482 private Map<String, org.onap.vid.asdc.beans.tosca.Input> extractVfInputsFromCsarByAnnotation(ISdcCsarHelper csarHelper, org.onap.vid.model.Group group) {
483 Map<String, org.onap.vid.asdc.beans.tosca.Input> inputMap = new HashMap<>();
484 if ( group.getProperties().getVfModuleLabel() != null ) {
485 List<Input> inputsList = csarHelper.getInputsWithAnnotations();
486 for (Input input : inputsList) {
487 extractVfModuleInput(group, inputMap, input);
493 private void extractVfModuleInput(org.onap.vid.model.Group group, Map<String, org.onap.vid.asdc.beans.tosca.Input> inputMap, Input input) {
494 if ( input.getAnnotations() != null ) {
495 List<Property> annotationProperties = input.getAnnotations().get("source").getProperties();
496 if ( isInputMatchesToGroup(annotationProperties, group) ) {
497 final org.onap.vid.asdc.beans.tosca.Input vfModuleInput = new org.onap.vid.asdc.beans.tosca.Input(input, annotationProperties);
498 if ( vfModuleInput.getInputProperties() != null && vfModuleInput.getInputProperties().getParamName() != null ) {
499 inputMap.put(vfModuleInput.getInputProperties().getParamName(), vfModuleInput);
501 inputMap.put(input.getName(), vfModuleInput);
508 private boolean isInputMatchesToGroup(List<Property> annotationProperties, org.onap.vid.model.Group group) {
509 for (Property property : annotationProperties) {
510 if ( property.getName().equals(VF_MODULE_LABEL) ) {
511 final Object values = property.getValue();
512 final String vfModuleLabel = group.getProperties().getVfModuleLabel();
513 if ( values instanceof List ) {
514 if ( listContainsAsString((List) values, vfModuleLabel) ) return true;
516 return getPropertyValueAsString(property).equals(vfModuleLabel);
523 private boolean listContainsAsString(List list, String value) {
524 for (Object v : list) {
525 if ( StringUtils.equals(v.toString(), value) ) {
532 public String getPropertyValueAsString(Property property) {
533 return removeSquareBrackets(property.getValue().toString());
536 private String removeSquareBrackets(String stringWithSquareBrackets) {
537 return stringWithSquareBrackets.replaceAll("(^\\[|\\]$)", "");
540 private GroupProperties extractVfModuleProperties(Group group, ISdcCsarHelper csarHelper) {
541 GroupProperties vfModuleProperties = new GroupProperties();
542 if ( csarHelper.getGroupPropertyAsObject(group, Constants.MIN_VF_MODULE_INSTANCES) != null )
543 vfModuleProperties.setMinCountInstances((Integer) csarHelper.getGroupPropertyAsObject(group, Constants.MIN_VF_MODULE_INSTANCES));
544 if ( csarHelper.getGroupPropertyAsObject(group, Constants.MAX_VF_MODULE_INSTANCES) != null )
545 vfModuleProperties.setMaxCountInstances((Integer) csarHelper.getGroupPropertyAsObject(group, Constants.MAX_VF_MODULE_INSTANCES));
546 if ( csarHelper.getGroupPropertyAsObject(group, Constants.INITIAL_COUNT) != null )
547 vfModuleProperties.setInitialCount((Integer) csarHelper.getGroupPropertyAsObject(group, Constants.INITIAL_COUNT));
548 if ( csarHelper.getGroupPropertyAsObject(group, VF_MODULE_LABEL) != null )
549 vfModuleProperties.setVfModuleLabel((String) csarHelper.getGroupPropertyAsObject(group, VF_MODULE_LABEL));
550 vfModuleProperties.setBaseModule(isModuleTypeIsBaseObjectSafe(csarHelper.getGroupPropertyAsObject(group, Constants.VF_MODULE_TYPE)));
551 return vfModuleProperties;
555 public static boolean isModuleTypeIsBaseObjectSafe(@Nullable Object vfModuleTypeValue) {
556 return (vfModuleTypeValue instanceof String) && (isModuleTypeIsBase((String) vfModuleTypeValue));
559 protected static boolean isModuleTypeIsBase(String vfModuleTypeValue) {
560 return "Base".equalsIgnoreCase(vfModuleTypeValue);
564 private Map<String, org.onap.vid.asdc.beans.tosca.Input> extractInputsAndCommandsForNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode) {
565 Map<String, org.onap.vid.asdc.beans.tosca.Input> inputMap = new HashMap<>();
566 Map<String, CommandProperty> commandPropertyMap = new HashMap<>();
568 List<Input> inputs = csarHelper.getServiceInputs();
569 Map<String, String> properties = csarHelper.filterNodeTemplatePropertiesByValue(nodeTemplate, FilterType.CONTAINS, Constants.GET_INPUT);
570 for (Map.Entry<String, String> property : properties.entrySet()) {
571 String inputKey = property.getValue();
572 String key = extractInputValue(inputKey);
573 for (Input input : inputs) {
574 if ( input.getName().equals(key) ) {
575 org.onap.vid.asdc.beans.tosca.Input localInput = new org.onap.vid.asdc.beans.tosca.Input();
576 localInput = convertInput(input, localInput);
577 String name = property.getKey();
578 commandPropertyMap.put(name, extractCommands(name, key));
579 inputMap.put(name, localInput);
583 newNode.setCommands(commandPropertyMap);
587 private String extractInputValue(String inputKey) {
588 return inputKey.substring(inputKey.indexOf(':') + 1);
591 private org.onap.vid.asdc.beans.tosca.Input convertInput(Input parserInput, org.onap.vid.asdc.beans.tosca.Input localInput) {
592 localInput.setDefault(parserInput.getDefault());
593 localInput.setDescription(parserInput.getDescription());
594 localInput.setRequired(parserInput.isRequired());
595 localInput.setType(parserInput.getType());
596 localInput.setConstraints(parserInput.getConstraints());
597 // localInput.setentry_schema()
601 private CommandProperty extractCommands(String displayName, String inputName) {
602 CommandProperty commandProperty = new CommandProperty();
603 commandProperty.setDisplayName(displayName);
604 commandProperty.setCommand(Constants.GET_INPUT);
605 commandProperty.setInputName(inputName);
606 return commandProperty;
609 private void setEcompNamingProperty(Map<String, String> propertiesMap, String isUserProvidingVnfNameOptional) {
610 propertiesMap.put(Constants.ECOMP_GENERATED_NAMING_PROPERTY, isUserProvidingVnfNameOptional);
613 private String validateInstantiationType(ISdcCsarHelper csarHelper){
614 String instantiationType = csarHelper.getServiceMetadata().getValue(Constants.INSTANTIATION_TYPE);
615 String validatedInstantiationType = Constants.CLIENT_CONFIG;
616 if(instantiationType != null && !instantiationType.isEmpty()){
617 if(instantiationType.equalsIgnoreCase(Constants.MACRO) || instantiationType.equalsIgnoreCase(Constants.BOTH))
618 validatedInstantiationType = Constants.MACRO;
619 else if(instantiationType.equalsIgnoreCase(Constants.A_LA_CARTE))
620 validatedInstantiationType = Constants.A_LA_CARTE;
622 return validatedInstantiationType;
625 private Map<String, Node> extractVrfsFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
626 List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplatesByType(Constants.VRF_NODE_TYPE);
627 return this.extractNodesFromCsar(csarHelper,policiesTargets,nodeTemplates);
630 private Map<String, Node> extractNodesFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets, List<NodeTemplate> nodeTemplates){
631 HashMap<String, Node> nodeHashMap = new HashMap<>();
632 for (NodeTemplate nodeTemplate : nodeTemplates) {
633 Node node = new Node();
634 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, node, policiesTargets);
635 nodeHashMap.put(nodeTemplate.getName(), node);
640 private Map<String, ResourceGroup> extractVnfGroupsFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets, Map<String, Integer> scalingPolicies) {
641 List<Group> resourceGroups = csarHelper.getGroupsOfTopologyTemplateByToscaGroupType(Constants.RESOURCE_GROUP_TYPE);
643 return resourceGroups.stream()
644 .filter(group -> group.getProperties().get(Constants.RESOURCE_GROUP_CONTAINED_TYPE).getValue().equals("VF"))
645 .collect(toMap(Group::getName, group -> parseResourceGroup(group, csarHelper, policiesTargets, scalingPolicies)));
648 private ResourceGroup parseResourceGroup(Group group, ISdcCsarHelper csarHelper, List<String> policiesTargets, Map<String, Integer> scalingPolicies) {
649 return new ResourceGroup(
651 group.getMetadata().getValue(Constants.INVARIANT_UUID),
652 group.getMetadata().getValue(Constants.UUID),
653 group.getMetadata().getValue(Constants.VERSION),
654 group.getMetadata().getValue(Constants.NAME),
655 group.getMetadata().getValue(Constants.NAME),
656 getPropertiesOfResourceGroup(group.getProperties(), policiesTargets.contains(group.getName()), scalingPolicies.get(group.getName())),
657 csarHelper.getGroupMembersFromTopologyTemplate(group.getName()).stream()
658 .collect(toMap(NodeTemplate::getName, node -> getServiceProxyFromNodeTemplate(node, csarHelper, policiesTargets)))
662 private Map<String, Object> getPropertiesOfResourceGroup(Map<String, Property> properties, boolean hasPolicyTarget, Integer qty) {
663 Map<String, Object> propertiesMap = properties.entrySet().stream()
664 .collect(toMap(Map.Entry::getKey, e -> e.getValue().getValue()));
665 propertiesMap.put(Constants.ECOMP_GENERATED_NAMING_PROPERTY, String.valueOf(hasPolicyTarget));
667 propertiesMap.put(Constants.QUANTITY, qty);
670 return propertiesMap;
673 public List<String> extractNamingPoliciesTargets(ISdcCsarHelper csarHelper) {
674 List<Policy> policies = csarHelper.getPoliciesOfTopologyTemplateByToscaPolicyType(Constants.NAMING_POLICY_TYPE);
675 return policies.stream()
676 .filter(policy -> policy.getProperties().get(Constants.TYPE) != null &&
677 policy.getProperties().get(Constants.TYPE).getValue() != null &&
678 StringUtils.equalsIgnoreCase(policy.getProperties().get(Constants.TYPE).getValue().toString(), "naming"))
679 .flatMap(policy -> policy.getTargets().stream())
683 public Map<String, Integer> extractScalingPolicyOfGroup(ISdcCsarHelper csarHelper) {
684 return csarHelper.getPoliciesOfTopologyTemplateByToscaPolicyType(Constants.SCALING_POLICY_TYPE)
686 .filter(policy -> policy.getProperties().containsKey(Constants.QUANTITY))
688 Integer qty = Integer.parseInt(policy.getProperties().get(Constants.QUANTITY).getValue().toString());
690 .getTargets().stream()
691 .map(target -> Pair.of(target, qty));
693 .collect(toMap(Pair::getKey, Pair::getValue));