1 package org.onap.vid.asdc.parser;
3 import org.apache.commons.collections.CollectionUtils;
4 import org.apache.commons.lang3.StringUtils;
5 import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
6 import org.onap.sdc.tosca.parser.enums.FilterType;
7 import org.onap.sdc.tosca.parser.enums.SdcTypes;
8 import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
9 import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
10 import org.onap.sdc.toscaparser.api.Group;
11 import org.onap.sdc.toscaparser.api.*;
12 import org.onap.sdc.toscaparser.api.elements.Metadata;
13 import org.onap.sdc.toscaparser.api.parameters.Input;
14 import org.onap.vid.asdc.beans.Service;
15 import org.onap.vid.model.*;
17 import java.nio.file.Path;
20 import static java.util.stream.Collectors.toList;
21 import static java.util.stream.Collectors.toMap;
22 import static org.onap.vid.asdc.parser.ToscaParserImpl2.Constants.VF_MODULE_LABEL;
24 public class ToscaParserImpl2 {
27 private final VidNotionsBuilder vidNotionsBuilder;
29 public class Constants {
30 public static final String UUID = "UUID";
31 public static final String DESCRIPTION = "description";
32 public static final String SERVICE_TYPE = "serviceType";
33 public static final String SERVICE_ROLE = "serviceRole";
34 public static final String ECOMP_GENERATED_NAMING = "ecompGeneratedNaming";
36 public static final String CUSTOMIZATION_UUID = "customizationUUID";
37 public static final String VF_MODULE_MODEL_VERSION = "vfModuleModelVersion";
38 public static final String VF_MODULE_MODEL_CUSTOMIZATION_UUID = "vfModuleModelCustomizationUUID";
39 public static final String VOLUME_GROUP = "volume_group";
40 public static final String VF_MODULE_MODEL_INVARIANT_UUID = "vfModuleModelInvariantUUID";
41 public static final String VF_MODULE_MODEL_UUID = "vfModuleModelUUID";
42 public static final String INVARIANT_UUID = "invariantUUID";
43 public static final String VERSION = "version";
44 public static final String NAME = "name";
45 public static final String CATEGORY = "category";
46 public static final String VF_MODULE_MODEL_NAME = "vfModuleModelName";
47 public static final String GET_INPUT = "get_input";
48 public static final String TYPE = "type";
50 public static final String INSTANTIATION_TYPE = "instantiationType";
52 public static final String BOTH = "Both";
53 public static final String MACRO = "Macro";
54 public static final String A_LA_CARTE = "A-La-Carte";
55 public static final String CLIENT_CONFIG = "ClientConfig";
58 public static final String GROUPING = "GROUPING";
61 public static final String MIN_VF_MODULE_INSTANCES = "min_vf_module_instances";
62 public static final String MAX_VF_MODULE_INSTANCES = "max_vf_module_instances";
63 public static final String INITIAL_COUNT = "initial_count";
64 public static final String VF_MODULE_LABEL = "vf_module_label";
65 public static final String VF_MODULE_TYPE = "vf_module_type";
67 //collection resource properties
68 public static final String SUBCATEGORY = "subcategory";
69 public static final String RESOURCE_VENDOR = "resourceVendor";
70 public static final String RESOURCE_VENDOR_RELEASE = "resourceVendorRelease";
71 public static final String RESOURCE_VENDOR_MODEL_NUMBER = "resourceVendorModelNumber";
72 public static final String ORG_OPENECOMP_GROUPS_NETWORK_COLLECTION = "org.openecomp.groups.NetworkCollection";
73 public static final String NETWORK_COLLECTION_FUNCTION = "network_collection_function";
74 public static final String NETWORK_COLLECTION_DESCRIPTION = "network_collection_description";
76 //vfc instance group properties
77 public static final String VFC_INSTANCE_GROUP_TYPE = "org.openecomp.groups.VfcInstanceGroup";
78 public static final String VFC_PARENT_PORT_ROLE = "vfc_parent_port_role";
79 public static final String SUBINTERFACE_ROLE = "subinterface_role";
80 public static final String VFC_INSTANCE_GROUP_FUNCTION = "vfc_instance_group_function";
82 public static final String FABRIC_CONFIGURATION_TYPE = "org.openecomp.nodes.FabricConfiguration";
84 public static final String RESOURCE_GROUP_TYPE = "org.openecomp.groups.ResourceInstanceGroup";
85 public static final String RESOURCE_GROUP_CONTAINED_TYPE = "contained_resource_type";
87 public static final String VNF_GROUP = "VnfGroup";
89 public static final String NAMING_POLICY_TYPE = "org.openecomp.policies.External";
91 public static final String ECOMP_GENERATED_NAMING_PROPERTY = "ecomp_generated_naming";
94 public ToscaParserImpl2(VidNotionsBuilder vidNotionsBuilder) {
95 this.vidNotionsBuilder = vidNotionsBuilder;
98 public ServiceModel makeServiceModel(Path path, Service asdcServiceMetadata) throws SdcToscaParserException {
99 ServiceModel serviceModel = new ServiceModel();
100 ISdcCsarHelper sdcCsarHelper = getSdcCsarHelper(path);
101 List<String> policiesTargets = extractNamingPoliciesTargets(sdcCsarHelper);
103 serviceModel.setService(extractServiceFromCsar(asdcServiceMetadata, sdcCsarHelper));
104 serviceModel.setVolumeGroups(extractVolumeGroups(sdcCsarHelper));
105 serviceModel.setVfModules(extractVfModuleFromCsar(sdcCsarHelper));
106 serviceModel.setVnfs(extractVnfsFromCsar(sdcCsarHelper, policiesTargets));
107 serviceModel.setConfigurations(extractPortMirroringConfigFromCsar(sdcCsarHelper, policiesTargets));
108 serviceModel.setServiceProxies(extractServiceProxyFromCsar(sdcCsarHelper, policiesTargets));
109 serviceModel.setNetworks(extractNetworksFromCsar(sdcCsarHelper, policiesTargets));
110 serviceModel.setPnfs(extractPnfsFromCsar(sdcCsarHelper, policiesTargets));
111 serviceModel.setCollectionResource(extractCRFromCsar(sdcCsarHelper, policiesTargets));
112 serviceModel.setFabricConfigurations(extractFabricConfigFromCsar(sdcCsarHelper, policiesTargets));
113 serviceModel.setVnfGroups(extractVnfGroupsFromCsar(sdcCsarHelper, policiesTargets));
114 serviceModel.getService().setVidNotions(vidNotionsBuilder.buildVidNotions(sdcCsarHelper, serviceModel));
118 public ISdcCsarHelper getSdcCsarHelper(Path path) throws SdcToscaParserException {
119 SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance();
120 return factory.getSdcCsarHelper(path.toFile().getAbsolutePath(), false);
123 private org.onap.vid.model.Service extractServiceFromCsar(Service asdcServiceMetadata, ISdcCsarHelper csarHelper) {
124 org.onap.vid.model.Service service = new org.onap.vid.model.Service();
126 service.setName(csarHelper.getServiceMetadata().getValue(Constants.NAME));
127 service.setCategory(csarHelper.getServiceMetadata().getValue(Constants.CATEGORY));
128 service.setInvariantUuid(csarHelper.getServiceMetadata().getValue(Constants.INVARIANT_UUID));
129 service.setUuid(csarHelper.getServiceMetadata().getValue(Constants.UUID));
130 service.setVersion(asdcServiceMetadata.getVersion());
131 service.setDescription(csarHelper.getServiceMetadata().getValue(Constants.DESCRIPTION));
132 service.setInputs(inputsListToInputsMap(csarHelper.getInputsWithAnnotations()));
133 service.setServiceEcompNaming(isUserProvidingServiceNameOptional(csarHelper));
134 service.setServiceType(csarHelper.getServiceMetadata().getValue(Constants.SERVICE_TYPE));
135 service.setServiceRole(csarHelper.getServiceMetadata().getValue(Constants.SERVICE_ROLE));
136 service.setInstantiationType(validateInstantiationType(csarHelper));
140 private String isUserProvidingServiceNameOptional(ISdcCsarHelper csarHelper) {
141 return ToscaNamingPolicy.isUserProvidingServiceNameOptional(csarHelper);
144 private Map<String, CR> extractCRFromCsar(ISdcCsarHelper sdcCsarHelper, List<String> policiesTargets) {
145 List<NodeTemplate> nodeTemplates = sdcCsarHelper.getServiceNodeTemplates();
146 Map<String, CR> collectionResourceMap = new HashMap<>();
148 for (NodeTemplate nodeTemplate : nodeTemplates) {
149 if ( nodeTemplate.getMetaData().getValue(Constants.TYPE).equals(SdcTypes.CR.getValue()) ) {
151 populateCrFromNodeTemplate(nodeTemplate, sdcCsarHelper, cr, policiesTargets);
152 collectionResourceMap.put(nodeTemplate.getName(), cr);
156 return collectionResourceMap;
159 private Map<String, Node> extractFabricConfigFromCsar(ISdcCsarHelper sdcCsarHelper, List<String> policiesTargets) {
160 List<NodeTemplate> nodeTemplates = sdcCsarHelper.getServiceNodeTemplates();
161 Map<String, Node> fabricConfiguration = new HashMap<>();
163 for (NodeTemplate nodeTemplate : nodeTemplates) {
164 List<NodeTemplate> nodeTemplateChildren = sdcCsarHelper.getNodeTemplateChildren(nodeTemplate);
165 for (NodeTemplate nodeTemplateChild : nodeTemplateChildren) {
166 if ( nodeTemplateChild.getType().equals(Constants.FABRIC_CONFIGURATION_TYPE) ) {
167 Node node = new Node();
168 fabricConfiguration.put(nodeTemplateChild.getName(), populateNodeFromNodeTemplate(nodeTemplateChild, sdcCsarHelper, node, policiesTargets));
173 return fabricConfiguration;
177 private void populateCrFromNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper sdcCsarHelper, CR cr, List<String> policiesTargets) {
178 populateNodeFromNodeTemplate(nodeTemplate, sdcCsarHelper, cr, policiesTargets);
179 cr.setCustomizationUUID(nodeTemplate.getMetaData().getValue(Constants.CUSTOMIZATION_UUID));
180 cr.setCategory(nodeTemplate.getMetaData().getValue(Constants.CATEGORY));
181 cr.setSubcategory(nodeTemplate.getMetaData().getValue(Constants.SUBCATEGORY));
182 cr.setResourceVendor(nodeTemplate.getMetaData().getValue(Constants.RESOURCE_VENDOR));
183 cr.setResourceVendorRelease(nodeTemplate.getMetaData().getValue(Constants.RESOURCE_VENDOR_RELEASE));
184 cr.setResourceVendorModelNumber(nodeTemplate.getMetaData().getValue(Constants.RESOURCE_VENDOR_MODEL_NUMBER));
185 cr.setNetworksCollection(getNetworksCollectionMapFromGroupsList(sdcCsarHelper, nodeTemplate));
188 private Map<String, NetworkCollection> getNetworksCollectionMapFromGroupsList(ISdcCsarHelper sdcCsarHelper, NodeTemplate nodeTemplate) {
189 List<Group> groups = sdcCsarHelper.getGroupsOfOriginOfNodeTemplateByToscaGroupType(nodeTemplate, Constants.ORG_OPENECOMP_GROUPS_NETWORK_COLLECTION);
190 Map<String, NetworkCollection> networksCollectionMap = new HashMap<>();
191 for (Group group : groups) {
192 networksCollectionMap.put(group.getName(), populateCollectionNetworkFromGroup(group, nodeTemplate));
194 return networksCollectionMap;
197 private NetworkCollection populateCollectionNetworkFromGroup(Group group, NodeTemplate nodeTemplate) {
198 NetworkCollection networkCollection = new NetworkCollection();
199 networkCollection.setUuid(group.getMetadata().getValue(Constants.UUID));
200 networkCollection.setInvariantUuid(group.getMetadata().getValue(Constants.INVARIANT_UUID));
201 networkCollection.setVersion(group.getMetadata().getValue(Constants.VERSION));
202 networkCollection.setName(group.getMetadata().getValue(Constants.NAME));
203 extractPropertiesOfCollectionNetworkFromCsar(group, nodeTemplate, networkCollection);
205 return networkCollection;
208 private void extractPropertiesOfCollectionNetworkFromCsar(Group group, NodeTemplate nodeTemplate, NetworkCollection networkCollection) {
209 LinkedHashMap<String, Property> properties = group.getProperties();
210 Map<String, Property> nodeTemplateProperties = nodeTemplate.getProperties();
212 String networkCollectionFunction = (String) ((Map) (properties.get(Constants.NETWORK_COLLECTION_FUNCTION).getValue())).get(Constants.GET_INPUT);
213 String networkCollectionDescription = (String) ((Map) (properties.get(Constants.NETWORK_COLLECTION_DESCRIPTION).getValue())).get(Constants.GET_INPUT);
215 networkCollection.getNetworkCollectionProperties().setNetworkCollectionDescription((String) nodeTemplateProperties.get(networkCollectionDescription).getValue());
216 networkCollection.getNetworkCollectionProperties().setNetworkCollectionFunction((String) nodeTemplateProperties.get(networkCollectionFunction).getValue());
220 private Map<String, VNF> extractVnfsFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
221 List<NodeTemplate> nodeTemplates = csarHelper.getServiceVfList();
222 Map<String, VNF> vnfsMaps = new HashMap<>();
224 for (NodeTemplate nodeTemplate : nodeTemplates) {
226 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, vnf, policiesTargets);
227 vnf.setModelCustomizationName(nodeTemplate.getName());
228 vnf.setVfModules(getVfModulesFromVF(csarHelper, vnf.getCustomizationUuid()));
229 vnf.setVolumeGroups(getVolumeGroupsFromVF(csarHelper, vnf.getCustomizationUuid()));
230 vnf.setVfcInstanceGroups(getVfcInstanceGroup(csarHelper, nodeTemplate));
231 if (ToscaNamingPolicy.getEcompNamingValueForNode(nodeTemplate, "nf_naming").equals("true")) {
232 setEcompNamingProperty(vnf.getProperties(), "true");
234 vnfsMaps.put(nodeTemplate.getName(), vnf);
239 private Map<String, VfcInstanceGroup> getVfcInstanceGroup(ISdcCsarHelper csarHelper, NodeTemplate nodeTemplate) {
240 List<Group> vfcList = csarHelper.getGroupsOfOriginOfNodeTemplateByToscaGroupType(nodeTemplate, Constants.VFC_INSTANCE_GROUP_TYPE);
241 return vfcList.stream()
242 .collect(toMap(Group::getName, group -> populateVfcInstanceGroupFromGroup(group, nodeTemplate)));
245 private VfcInstanceGroup populateVfcInstanceGroupFromGroup(Group group, NodeTemplate nodeTemplate) {
246 VfcInstanceGroup vfcInstanceGroup = new VfcInstanceGroup();
247 vfcInstanceGroup.setUuid(group.getMetadata().getValue(Constants.UUID));
248 vfcInstanceGroup.setInvariantUuid(group.getMetadata().getValue(Constants.INVARIANT_UUID));
249 vfcInstanceGroup.setVersion(group.getMetadata().getValue(Constants.VERSION));
250 vfcInstanceGroup.setName(group.getMetadata().getValue(Constants.NAME));
251 vfcInstanceGroup.setVfcInstanceGroupProperties(getVfcPropertiesFromGroup(nodeTemplate, group));
253 return vfcInstanceGroup;
257 private VfcInstanceGroupProperties getVfcPropertiesFromGroup(NodeTemplate nodeTemplate, Group group) {
258 VfcInstanceGroupProperties vfcInstanceGroupProperties = new VfcInstanceGroupProperties();
259 vfcInstanceGroupProperties.setVfcParentPortRole((String) group.getProperties().get(Constants.VFC_PARENT_PORT_ROLE).getValue());
260 vfcInstanceGroupProperties.setSubinterfaceRole((String) group.getProperties().get(Constants.SUBINTERFACE_ROLE).getValue());
262 String networkCollectionFunction = (String) ((Map) (group.getProperties().get(Constants.NETWORK_COLLECTION_FUNCTION).getValue())).get(Constants.GET_INPUT);
263 String vfcInstanceGroupFunction = (String) ((Map) (group.getProperties().get(Constants.VFC_INSTANCE_GROUP_FUNCTION).getValue())).get(Constants.GET_INPUT);
265 if ( nodeTemplate.getProperties().get(networkCollectionFunction) != null )
266 vfcInstanceGroupProperties.setNetworkCollectionFunction((String) nodeTemplate.getProperties().get(networkCollectionFunction).getValue());
267 if ( nodeTemplate.getProperties().get(vfcInstanceGroupFunction) != null )
268 vfcInstanceGroupProperties.setVfcInstanceGroupFunction((String) nodeTemplate.getProperties().get(vfcInstanceGroupFunction).getValue());
270 return vfcInstanceGroupProperties;
273 private Map<String, PortMirroringConfig> extractPortMirroringConfigFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
274 List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.CONFIGURATION);//TODO change to
275 Map<String, PortMirroringConfig> configMaps = new HashMap<>();
277 for (NodeTemplate nodeTemplate : nodeTemplates) {
278 PortMirroringConfig pmConfig = new PortMirroringConfig();
279 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, pmConfig, policiesTargets);
281 pmConfig.setModelCustomizationName(nodeTemplate.getName());
282 pmConfig.setRequirementAssignments(nodeTemplate.getRequirements());
283 setSourceAndCollectorProxyNodes(csarHelper, pmConfig, nodeTemplate);
285 configMaps.put(nodeTemplate.getName(), pmConfig);
291 private Map<String, ServiceProxy> extractServiceProxyFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
292 List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.SERVICE_PROXY);
293 return nodeTemplates.stream()
294 .collect(toMap(NodeTemplate::getName, node -> getServiceProxyFromNodeTemplate(node, csarHelper, policiesTargets)));
297 private ServiceProxy getServiceProxyFromNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, List<String> policiesTargets) {
298 ServiceProxy serviceProxy = new ServiceProxy();
299 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, serviceProxy, policiesTargets);
301 Map<String, String> metadata = nodeTemplate.getMetaData().getAllProperties();
302 serviceProxy.setSourceModelUuid(metadata.get("sourceModelUuid"));
303 serviceProxy.setSourceModelInvariant(metadata.get("sourceModelInvariant"));
304 serviceProxy.setSourceModelName(metadata.get("sourceModelName"));
309 private void setSourceAndCollectorProxyNodes(ISdcCsarHelper csarHelper, PortMirroringConfig portMirroringConfig, NodeTemplate nodeTemplate) {
310 RequirementAssignments requirementAssignments = nodeTemplate.getRequirements();
312 List<String> sourceNodes = getRequirementsNodesNames(requirementAssignments.getRequirementsByName("source").getAll());
313 portMirroringConfig.setSourceNodes(sourceNodes);
315 List<String> collectorNodes = getRequirementsNodesNames(requirementAssignments.getRequirementsByName("collector").getAll());
316 if ( !collectorNodes.isEmpty() ) { // vprobe
317 portMirroringConfig.setCollectorNodes(collectorNodes);
318 } else { // pprobe - configuration by policy
319 String collectorNodeName = csarHelper.getNodeTemplatePropertyLeafValue(nodeTemplate, "collector_node");
320 if ( collectorNodeName != null ) {
321 portMirroringConfig.setCollectorNodes(Arrays.asList(collectorNodeName));
322 portMirroringConfig.setConfigurationByPolicy(true);
327 private List<String> getRequirementsNodesNames(List<RequirementAssignment> requirements) {
329 List<String> requirementsNodes = new ArrayList<>();
330 if ( !CollectionUtils.isEmpty(requirements) ) {
331 requirementsNodes = requirements.stream().map(RequirementAssignment::getNodeTemplateName).collect(toList());
334 return requirementsNodes;
337 Map<String, VfModule> getVfModulesFromVF(ISdcCsarHelper csarHelper, String vfUuid) {
338 List<Group> vfModulesByVf = csarHelper.getVfModulesByVf(vfUuid);
339 return vfModulesByVf.stream()
340 .collect(toMap(Group::getName, group -> populateVfModuleFromGroup(group, csarHelper)));
343 Map<String, VolumeGroup> getVolumeGroupsFromVF(ISdcCsarHelper csarHelper, String vfCustomizationUuid) {
344 List<Group> vfModulesByVf = csarHelper.getVfModulesByVf(vfCustomizationUuid);
345 return vfModulesByVf.stream()
346 .filter((group -> isVolumeGroup(group)))
347 .collect(toMap(Group::getName, group -> populateVolumeGroupFromGroup(group, csarHelper)));
350 private static Boolean isVolumeGroup(Group group) {
351 return Boolean.valueOf(group.getPropertyValue(Constants.VOLUME_GROUP).toString());
354 private Map<String, Network> extractNetworksFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
355 List<NodeTemplate> nodeTemplates = csarHelper.getServiceVlList();
356 Map<String, Network> networksMap = new HashMap<>();
358 for (NodeTemplate nodeTemplate : nodeTemplates) {
359 Network newNetwork = new Network();
360 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, newNetwork, policiesTargets);
361 newNetwork.setModelCustomizationName(nodeTemplate.getName());
362 if (ToscaNamingPolicy.getEcompNamingValueForNode(nodeTemplate, "exVL_naming").equals("true")) {
363 setEcompNamingProperty(newNetwork.getProperties(), "true");
365 networksMap.put(nodeTemplate.getName(), newNetwork);
370 private Map<String, Node> extractPnfsFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
371 List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.PNF);
372 HashMap<String, Node> pnfHashMap = new HashMap<>();
374 for (NodeTemplate nodeTemplate : nodeTemplates) {
375 Node pnf = new Node();
376 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, pnf, policiesTargets);
377 pnfHashMap.put(nodeTemplate.getName(), pnf);
382 private Map<String, VfModule> extractVfModuleFromCsar(ISdcCsarHelper csarHelper) {
383 List<NodeTemplate> serviceVfList = csarHelper.getServiceVfList();
384 HashMap<String, VfModule> vfModuleHashMap = new HashMap<>();
386 for (NodeTemplate nodeTemplate : serviceVfList) {
387 Map<String, VfModule> nodeTemplateVfModule =
388 getVfModulesFromVF(csarHelper, nodeTemplate.getMetaData().getValue(Constants.CUSTOMIZATION_UUID));
389 vfModuleHashMap.putAll(nodeTemplateVfModule);
391 return vfModuleHashMap;
394 private Map<String, VolumeGroup> extractVolumeGroups(ISdcCsarHelper csarHelper) {
395 HashMap<String, VolumeGroup> volumeGroupHashMap = new HashMap<>();
396 for (NodeTemplate nodeTemplate : csarHelper.getServiceVfList()) {
397 Map<String, VolumeGroup> nodeTemplateVolumeGroups =
398 getVolumeGroupsFromVF(csarHelper, csarHelper.getNodeTemplateCustomizationUuid(nodeTemplate));
399 volumeGroupHashMap.putAll(nodeTemplateVolumeGroups);
401 return volumeGroupHashMap;
404 private Map<String, org.onap.vid.asdc.beans.tosca.Input> inputsListToInputsMap(List<org.onap.sdc.toscaparser.api.parameters.Input> inputList) {
405 Map<String, org.onap.vid.asdc.beans.tosca.Input> inputs = new HashMap<>();
406 for (org.onap.sdc.toscaparser.api.parameters.Input input : inputList) {
407 //Set only inputs without annotation to the service level
408 if ( input.getAnnotations() == null )
409 inputs.put(input.getName(), convertInput(input, new org.onap.vid.asdc.beans.tosca.Input(), null));
414 private Node populateNodeFromNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode, List<String> policiesTargets) {
415 newNode.setCustomizationUuid(csarHelper.getNodeTemplateCustomizationUuid(nodeTemplate));
416 newNode.setDescription(nodeTemplate.getMetaData().getValue(Constants.DESCRIPTION));
417 newNode.setInvariantUuid(nodeTemplate.getMetaData().getValue(Constants.INVARIANT_UUID));
418 newNode.setUuid(nodeTemplate.getMetaData().getValue(Constants.UUID));
419 newNode.setName(nodeTemplate.getMetaData().getValue(Constants.NAME));
420 newNode.setVersion(nodeTemplate.getMetaData().getValue(Constants.VERSION));
421 newNode.setInputs(extractInputsAndCommandsForNodeTemplate(nodeTemplate, csarHelper, newNode));
422 newNode.setType(nodeTemplate.getMetaData().getValue(Constants.TYPE));
423 Map<String, String> propertiesMap = nodeTemplate.getPropertiesObjects().stream()
424 .collect(toMap(Property::getName, p -> p.getValue().toString()));
425 setEcompNamingProperty(propertiesMap, String.valueOf(policiesTargets.contains(nodeTemplate.getName())));
426 newNode.setProperties(propertiesMap);
430 private VfModule populateVfModuleFromGroup(Group group, ISdcCsarHelper csarHelper) {
431 VfModule vfModule = new VfModule();
432 extractBasicPropertiesForGroup(vfModule, group, csarHelper);
433 vfModule.setVolumeGroupAllowed(isVolumeGroup(group));
437 private VolumeGroup populateVolumeGroupFromGroup(Group group, ISdcCsarHelper csarHelper) {
438 VolumeGroup volumeGroup = new VolumeGroup();
439 extractBasicPropertiesForGroup(volumeGroup, group, csarHelper);
443 private void extractBasicPropertiesForGroup(org.onap.vid.model.Group newGroup, Group group, ISdcCsarHelper csarHelper) {
444 newGroup.setDescription(group.getDescription());
445 newGroup.setVersion(group.getMetadata().getValue(Constants.VF_MODULE_MODEL_VERSION));
446 newGroup.setCustomizationUuid(group.getMetadata().getValue(Constants.VF_MODULE_MODEL_CUSTOMIZATION_UUID));
447 newGroup.setModelCustomizationName(group.getMetadata().getValue(Constants.VF_MODULE_MODEL_NAME));
448 newGroup.setName(group.getMetadata().getValue(Constants.VF_MODULE_MODEL_NAME));
449 newGroup.setUuid(group.getMetadata().getValue(Constants.VF_MODULE_MODEL_UUID));
450 newGroup.setInvariantUuid(group.getMetadata().getValue(Constants.VF_MODULE_MODEL_INVARIANT_UUID));
451 newGroup.setProperties(extractVfModuleProperties(group, csarHelper));
452 newGroup.setInputs(extractVfInputsFromCsarByAnnotation(csarHelper, newGroup));
456 private Map<String, org.onap.vid.asdc.beans.tosca.Input> extractVfInputsFromCsarByAnnotation(ISdcCsarHelper csarHelper, org.onap.vid.model.Group group) {
457 Map<String, org.onap.vid.asdc.beans.tosca.Input> inputMap = new HashMap<>();
458 if ( group.getProperties().getVfModuleLabel() != null ) {
459 List<Input> inputsList = csarHelper.getInputsWithAnnotations();
460 for (Input input : inputsList) {
461 extractVfModuleInput(group, inputMap, input);
467 private void extractVfModuleInput(org.onap.vid.model.Group group, Map<String, org.onap.vid.asdc.beans.tosca.Input> inputMap, Input input) {
468 if ( input.getAnnotations() != null ) {
469 List<Property> annotationProperties = input.getAnnotations().get("source").getProperties();
470 if ( isInputMatchesToGroup(annotationProperties, group) ) {
471 final org.onap.vid.asdc.beans.tosca.Input vfModuleInput = new org.onap.vid.asdc.beans.tosca.Input(input, annotationProperties);
472 if ( vfModuleInput.getInputProperties() != null && vfModuleInput.getInputProperties().getParamName() != null ) {
473 inputMap.put(vfModuleInput.getInputProperties().getParamName(), vfModuleInput);
475 inputMap.put(input.getName(), vfModuleInput);
482 private boolean isInputMatchesToGroup(List<Property> annotationProperties, org.onap.vid.model.Group group) {
483 for (Property property : annotationProperties) {
484 if ( property.getName().equals(VF_MODULE_LABEL) ) {
485 final Object values = property.getValue();
486 final String vfModuleLabel = group.getProperties().getVfModuleLabel();
487 if ( values instanceof List ) {
488 if ( listContainsAsString((List) values, vfModuleLabel) ) return true;
490 return getPropertyValueAsString(property).equals(vfModuleLabel);
497 private boolean listContainsAsString(List list, String value) {
498 for (Object v : list) {
499 if ( StringUtils.equals(v.toString(), value) ) {
506 public String getPropertyValueAsString(Property property) {
507 return removeSquareBrackets(property.getValue().toString());
510 private String removeSquareBrackets(String stringWithSquareBrackets) {
511 return stringWithSquareBrackets.replaceAll("(^\\[|\\]$)", "");
514 private GroupProperties extractVfModuleProperties(Group group, ISdcCsarHelper csarHelper) {
515 GroupProperties vfModuleProperties = new GroupProperties();
516 if ( csarHelper.getGroupPropertyAsObject(group, Constants.MIN_VF_MODULE_INSTANCES) != null )
517 vfModuleProperties.setMinCountInstances((Integer) csarHelper.getGroupPropertyAsObject(group, Constants.MIN_VF_MODULE_INSTANCES));
518 if ( csarHelper.getGroupPropertyAsObject(group, Constants.MAX_VF_MODULE_INSTANCES) != null )
519 vfModuleProperties.setMaxCountInstances((Integer) csarHelper.getGroupPropertyAsObject(group, Constants.MAX_VF_MODULE_INSTANCES));
520 if ( csarHelper.getGroupPropertyAsObject(group, Constants.INITIAL_COUNT) != null )
521 vfModuleProperties.setInitialCount((Integer) csarHelper.getGroupPropertyAsObject(group, Constants.INITIAL_COUNT));
522 if ( csarHelper.getGroupPropertyAsObject(group, VF_MODULE_LABEL) != null )
523 vfModuleProperties.setVfModuleLabel((String) csarHelper.getGroupPropertyAsObject(group, VF_MODULE_LABEL));
524 vfModuleProperties.setBaseModule(isModuleTypeIsBaseObjectSafe(csarHelper.getGroupPropertyAsObject(group, Constants.VF_MODULE_TYPE)));
525 return vfModuleProperties;
529 public static boolean isModuleTypeIsBaseObjectSafe(Object vfModuleTypeValue) {
530 return (vfModuleTypeValue instanceof String) && (isModuleTypeIsBase((String) vfModuleTypeValue));
533 protected static boolean isModuleTypeIsBase(String vfModuleTypeValue) {
534 return "Base".equalsIgnoreCase(vfModuleTypeValue);
538 private Map<String, org.onap.vid.asdc.beans.tosca.Input> extractInputsAndCommandsForNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode) {
539 Map<String, org.onap.vid.asdc.beans.tosca.Input> inputMap = new HashMap<>();
540 Map<String, CommandProperty> commandPropertyMap = new HashMap<>();
542 List<Input> inputs = csarHelper.getServiceInputs();
543 Map<String, String> properties = csarHelper.filterNodeTemplatePropertiesByValue(nodeTemplate, FilterType.CONTAINS, Constants.GET_INPUT);
544 for (Map.Entry<String, String> property : properties.entrySet()) {
545 String inputKey = property.getValue();
546 String key = extractInputValue(inputKey);
547 for (Input input : inputs) {
548 if ( input.getName().equals(key) ) {
549 org.onap.vid.asdc.beans.tosca.Input localInput = new org.onap.vid.asdc.beans.tosca.Input();
550 localInput = convertInput(input, localInput, nodeTemplate);
551 String name = property.getKey();
552 commandPropertyMap.put(name, extractCommands(name, key));
553 inputMap.put(name, localInput);
557 newNode.setCommands(commandPropertyMap);
561 private String extractInputValue(String inputKey) {
562 return inputKey.substring(inputKey.indexOf(':') + 1);
565 private org.onap.vid.asdc.beans.tosca.Input convertInput(Input parserInput, org.onap.vid.asdc.beans.tosca.Input localInput, NodeTemplate nodeTemplate){
566 localInput.setDefault(parserInput.getDefault());
567 localInput.setDescription(parserInput.getDescription());
568 localInput.setRequired(parserInput.isRequired());
569 localInput.setType(parserInput.getType());
570 localInput.setConstraints(parserInput.getConstraints());
571 // localInput.setentry_schema()
573 //if inputs of inner nodeTemplate - tell its details
574 if(nodeTemplate != null) {
575 Metadata metadata = nodeTemplate.getMetaData();
576 localInput.setTemplateName(metadata.getValue("name"));
577 localInput.setTemplateUUID(metadata.getValue("UUID"));
578 localInput.setTemplateInvariantUUID(metadata.getValue("invariantUUID"));
579 localInput.setTemplateCustomizationUUID(metadata.getValue("customizationUUID"));
585 private CommandProperty extractCommands(String displayName, String inputName) {
586 CommandProperty commandProperty = new CommandProperty();
587 commandProperty.setDisplayName(displayName);
588 commandProperty.setCommand(Constants.GET_INPUT);
589 commandProperty.setInputName(inputName);
590 return commandProperty;
593 private void setEcompNamingProperty(Map<String, String> propertiesMap, String isUserProvidingVnfNameOptional) {
594 propertiesMap.put(Constants.ECOMP_GENERATED_NAMING_PROPERTY, isUserProvidingVnfNameOptional);
597 private String validateInstantiationType(ISdcCsarHelper csarHelper){
598 String instantiationType = csarHelper.getServiceMetadata().getValue(Constants.INSTANTIATION_TYPE);
599 String validatedInstantiationType = Constants.CLIENT_CONFIG;
600 if(instantiationType != null && !instantiationType.isEmpty()){
601 if(instantiationType.equalsIgnoreCase(Constants.MACRO) || instantiationType.equalsIgnoreCase(Constants.BOTH))
602 validatedInstantiationType = Constants.MACRO;
603 else if(instantiationType.equalsIgnoreCase(Constants.A_LA_CARTE))
604 validatedInstantiationType = Constants.A_LA_CARTE;
606 return validatedInstantiationType;
609 private Map<String, ResourceGroup> extractVnfGroupsFromCsar(ISdcCsarHelper csarHelper, List<String> policiesTargets) {
610 List<Group> resourceGroups = csarHelper.getGroupsOfTopologyTemplateByToscaGroupType(Constants.RESOURCE_GROUP_TYPE);
612 return resourceGroups.stream()
613 .filter(group -> group.getProperties().get(Constants.RESOURCE_GROUP_CONTAINED_TYPE).getValue().equals("VF"))
614 .collect(toMap(Group::getName, group -> parseResourceGroup(group, csarHelper, policiesTargets)));
617 private ResourceGroup parseResourceGroup(Group group, ISdcCsarHelper csarHelper, List<String> policiesTargets) {
618 return new ResourceGroup(
620 group.getMetadata().getValue(Constants.INVARIANT_UUID),
621 group.getMetadata().getValue(Constants.UUID),
622 group.getMetadata().getValue(Constants.VERSION),
623 group.getMetadata().getValue(Constants.NAME),
624 group.getMetadata().getValue(Constants.NAME),
625 getPropertiesOfResourceGroup(group.getProperties(), policiesTargets.contains(group.getName())),
626 csarHelper.getGroupMembersFromTopologyTemplate(group.getName()).stream()
627 .collect(toMap(NodeTemplate::getName, node -> getServiceProxyFromNodeTemplate(node, csarHelper, policiesTargets)))
631 private Map<String, Object> getPropertiesOfResourceGroup(Map<String, Property> properties, boolean hasPolicyTarget) {
632 Map<String, Object> propertiesMap = properties.entrySet().stream()
633 .collect(toMap(Map.Entry::getKey, e -> e.getValue().getValue()));
634 propertiesMap.put(Constants.ECOMP_GENERATED_NAMING_PROPERTY, String.valueOf(hasPolicyTarget));
636 return propertiesMap;
639 public List<String> extractNamingPoliciesTargets(ISdcCsarHelper csarHelper) {
640 List<Policy> policies = csarHelper.getPoliciesOfTopologyTemplateByToscaPolicyType(Constants.NAMING_POLICY_TYPE);
641 return policies.stream()
642 .filter(policy -> policy.getProperties().get(Constants.TYPE) != null &&
643 policy.getProperties().get(Constants.TYPE).getValue() != null &&
644 StringUtils.equalsIgnoreCase(policy.getProperties().get(Constants.TYPE).getValue().toString(), "naming"))
645 .flatMap(policy -> policy.getTargets().stream())