1 package org.onap.vid.asdc.parser;
3 import org.onap.vid.asdc.beans.Service;
4 import org.onap.vid.model.*;
5 import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
6 import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
7 import org.onap.sdc.tosca.parser.impl.FilterType;
8 import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
9 import org.onap.sdc.tosca.parser.impl.SdcTypes;
10 import org.onap.sdc.toscaparser.api.*;
11 import org.onap.sdc.toscaparser.api.elements.Metadata;
12 import org.onap.sdc.toscaparser.api.parameters.Input;
14 import java.nio.file.Path;
16 import java.util.stream.Collectors;
18 import static java.util.stream.Collectors.toMap;
20 public class ToscaParserImpl2 {
23 public class Constants {
24 public final static String uuid = "UUID";
25 public final static String description = "description";
26 public final static String serviceType = "serviceType";
27 public final static String serviceRole = "serviceRole";
28 public final static String ecompGeneratedNaming = "ecompGeneratedNaming";
30 public final static String customizationUUID = "customizationUUID";
31 public final static String vfModuleModelVersion = "vfModuleModelVersion";
32 public final static String vfModuleModelCustomizationUUID = "vfModuleModelCustomizationUUID";
33 public final static String volume_group = "volume_group";
34 public final static String vfModuleModelInvariantUUID = "vfModuleModelInvariantUUID";
35 public final static String vfModuleModelUUID = "vfModuleModelUUID";
36 public final static String invariantUUID = "invariantUUID";
37 public final static String version = "version";
38 public final static String name = "name";
39 public final static String category = "category";
40 public final static String vfModuleModelName = "vfModuleModelName";
41 public final static String getInput = "get_input";
43 public final static String instantiationType = "instantiationType";
45 public final static String both = "Both";
46 public final static String macro = "Macro";
47 public final static String aLaCarte = "A-La-Carte";
48 public final static String clientConfig = "ClientConfig";
53 public ToscaParserImpl2() {
57 public ServiceModel makeServiceModel(Path path, Service asdcServiceMetadata) throws Exception {
58 ServiceModel serviceModel = new ServiceModel();
59 SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance();
60 ISdcCsarHelper sdcCsarHelper = factory.getSdcCsarHelper(path.toFile().getAbsolutePath(),false);
61 serviceModel.setService(extractServiceFromCsar(asdcServiceMetadata, sdcCsarHelper));
63 serviceModel.setVolumeGroups(extractVolumeGroups(sdcCsarHelper));
64 serviceModel.setVfModules(extractVfModuleFromCsar(sdcCsarHelper));
65 serviceModel.setVnfs(extractVnfsFromCsar(serviceModel,sdcCsarHelper));
66 serviceModel.setConfigurations(extractPortMirroringConfigFromCsar(sdcCsarHelper));
67 serviceModel.setServiceProxies(extractServiceProxyFromCsar(sdcCsarHelper));
68 serviceModel.setNetworks(extractNetworksFromCsar(sdcCsarHelper));
69 serviceModel.setPnfs(extractPnfsFromCsar(sdcCsarHelper));
73 private org.onap.vid.model.Service extractServiceFromCsar(Service asdcServiceMetadata, ISdcCsarHelper csarHelper) throws SdcToscaParserException {
74 org.onap.vid.model.Service service = new org.onap.vid.model.Service();
76 service.setName(csarHelper.getServiceMetadata().getValue(Constants.name));
77 service.setCategory(csarHelper.getServiceMetadata().getValue(Constants.category));
78 service.setInvariantUuid(csarHelper.getServiceMetadata().getValue(Constants.invariantUUID));
79 service.setUuid(csarHelper.getServiceMetadata().getValue(Constants.uuid));
80 service.setVersion(asdcServiceMetadata.getVersion());
81 service.setDescription(csarHelper.getServiceMetadata().getValue(Constants.description));
82 service.setInputs(inputsListToInputsMap(csarHelper.getServiceInputs()));
83 service.setServiceEcompNaming(csarHelper.getServiceMetadata().getValue(Constants.ecompGeneratedNaming));
84 service.setServiceType(csarHelper.getServiceMetadata().getValue(Constants.serviceType));
85 service.setServiceRole(csarHelper.getServiceMetadata().getValue(Constants.serviceRole));
86 service.setInstantiationType(validateInstantiationType(csarHelper));
91 private Map<String, VNF> extractVnfsFromCsar(ServiceModel serviceModel,ISdcCsarHelper csarHelper) {
92 List<NodeTemplate> nodeTemplates = csarHelper.getServiceVfList();
93 Map<String, VNF> vnfsMaps = new HashMap<String, VNF>();
95 for (NodeTemplate nodeTemplate : nodeTemplates) {
97 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, vnf);
99 vnf.setModelCustomizationName(nodeTemplate.getName());
100 Map<String, VfModule> vfModuleHashMap = getVfModulesFromVF(csarHelper, vnf.getCustomizationUuid());
101 vnf.setVfModules(vfModuleHashMap);
103 Map<String, VolumeGroup> volumeGroupMap = getVolumeGroupsFromVF(csarHelper, vnf.getCustomizationUuid());
104 vnf.setVolumeGroups(volumeGroupMap);
106 vnfsMaps.put(nodeTemplate.getName(), vnf);
111 private Map<String, PortMirroringConfig> extractPortMirroringConfigFromCsar(ISdcCsarHelper csarHelper) {
112 List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.CONFIGURATION);
113 Map<String, PortMirroringConfig> configMaps = new HashMap<>();
115 for (NodeTemplate nodeTemplate : nodeTemplates) {
116 PortMirroringConfig pmConfig = new PortMirroringConfig();
117 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, pmConfig);
119 pmConfig.setModelCustomizationName(nodeTemplate.getName());
120 pmConfig.setRequirementAssignments(nodeTemplate.getRequirements());
121 setSourceAndCollectorProxyNodes(csarHelper, pmConfig, nodeTemplate);
123 configMaps.put(nodeTemplate.getName(), pmConfig);
129 private Map<String, ServiceProxy> extractServiceProxyFromCsar(ISdcCsarHelper csarHelper) {
130 List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.SERVICE_PROXY);
131 Map<String, ServiceProxy> serviceProxies = new HashMap<>();
132 for (NodeTemplate nodeTemplate: nodeTemplates) {
133 ServiceProxy serviceProxy = new ServiceProxy();
134 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, serviceProxy);
136 Map<String, String> metadata = nodeTemplate.getMetaData().getAllProperties();
137 serviceProxy.setSourceModelUuid(metadata.get("sourceModelUuid"));
138 serviceProxy.setSourceModelInvariant(metadata.get("sourceModelInvariant"));
139 serviceProxy.setSourceModelName(metadata.get("sourceModelName"));
141 serviceProxies.put(nodeTemplate.getName(), serviceProxy);
144 return serviceProxies;
147 private void setSourceAndCollectorProxyNodes(ISdcCsarHelper csarHelper, PortMirroringConfig portMirroringConfig, NodeTemplate nodeTemplate) {
148 RequirementAssignments requirementAssignments = nodeTemplate.getRequirements();
150 List<String> sourceNodes = getRequirementsNodesNames(requirementAssignments.getRequirementsByName("source").getAll());
151 portMirroringConfig.setSourceNodes(sourceNodes);
153 List<String> collectorNodes = getRequirementsNodesNames(requirementAssignments.getRequirementsByName("collector").getAll());
154 if (!collectorNodes.isEmpty()) { // vprobe
155 portMirroringConfig.setCollectorNodes(collectorNodes);
156 } else { // pprobe - configuration by policy
157 String collectorNodeName = csarHelper.getNodeTemplatePropertyLeafValue(nodeTemplate, "collector_node");
158 if (collectorNodeName != null) {
159 portMirroringConfig.setCollectorNodes(Arrays.asList(collectorNodeName));
160 portMirroringConfig.setConfigurationByPolicy(true);
165 private List<String> getRequirementsNodesNames(List<RequirementAssignment> requirements) {
167 List<String> requirementsNodes = new ArrayList<>();
168 if (requirements != null && requirements.size() > 0) {
169 requirementsNodes = requirements.stream().map(RequirementAssignment::getNodeTemplateName).collect(Collectors.toList());
172 return requirementsNodes;
175 Map<String, VfModule> getVfModulesFromVF(ISdcCsarHelper csarHelper, String vfUuid) {
176 List<Group> vfModulesByVf = csarHelper.getVfModulesByVf(vfUuid);
177 return vfModulesByVf.stream()
178 .collect(toMap(Group::getName, this::populateVfModuleFromGroup));
181 Map<String, VolumeGroup> getVolumeGroupsFromVF(ISdcCsarHelper csarHelper, String vfCustomizationUuid) {
182 List<Group> vfModulesByVf = csarHelper.getVfModulesByVf(vfCustomizationUuid);
183 return vfModulesByVf.stream()
184 .filter((group -> isVolumeGroup(group)))
185 .collect(toMap(Group::getName, this::populateVolumeGroupFromGroup));
188 private static Boolean isVolumeGroup(Group group) {
189 return Boolean.valueOf(group.getPropertyValue(Constants.volume_group).toString());
192 private Map<String, Network> extractNetworksFromCsar(ISdcCsarHelper csarHelper) {
193 List<NodeTemplate> nodeTemplates = csarHelper.getServiceVlList();
194 Map<String, Network> networksMap = new HashMap<String, Network>();
196 for (NodeTemplate nodeTemplate : nodeTemplates) {
197 Network newNetwork = new Network();
198 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, newNetwork);
199 newNetwork.setModelCustomizationName(nodeTemplate.getName());
200 networksMap.put(nodeTemplate.getName(), newNetwork);
205 private Map<String,Node> extractPnfsFromCsar(ISdcCsarHelper csarHelper) {
206 List<NodeTemplate> nodeTemplates = csarHelper.getServiceNodeTemplateBySdcType(SdcTypes.PNF);
207 HashMap<String, Node> pnfHashMap = new HashMap<>();
209 for (NodeTemplate nodeTemplate : nodeTemplates) {
210 Node pnf = new Node();
211 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, pnf);
212 pnfHashMap.put(nodeTemplate.getName(), pnf);
217 private Map<String, VfModule> extractVfModuleFromCsar(ISdcCsarHelper csarHelper) {
218 List<NodeTemplate> serviceVfList = csarHelper.getServiceVfList();
219 HashMap<String, VfModule> vfModuleHashMap = new HashMap<>();
221 for (NodeTemplate nodeTemplate : serviceVfList) {
222 Map<String, VfModule> nodeTemplateVfModule =
223 getVfModulesFromVF(csarHelper, nodeTemplate.getMetaData().getValue(Constants.customizationUUID));
224 vfModuleHashMap.putAll(nodeTemplateVfModule);
226 return vfModuleHashMap;
229 private Map<String, VolumeGroup> extractVolumeGroups(ISdcCsarHelper csarHelper) {
230 HashMap<String, VolumeGroup> volumeGroupHashMap = new HashMap<>();
231 for (NodeTemplate nodeTemplate : csarHelper.getServiceVfList()) {
232 Map<String, VolumeGroup> nodeTemplateVolumeGroups =
233 getVolumeGroupsFromVF(csarHelper, csarHelper.getNodeTemplateCustomizationUuid(nodeTemplate));
234 volumeGroupHashMap.putAll(nodeTemplateVolumeGroups);
236 return volumeGroupHashMap;
239 private Map<String, org.onap.vid.asdc.beans.tosca.Input> inputsListToInputsMap(List<org.onap.sdc.toscaparser.api.parameters.Input> inputList) {
240 Map<String, org.onap.vid.asdc.beans.tosca.Input> inputs = new HashMap<>();
241 for (org.onap.sdc.toscaparser.api.parameters.Input input : inputList) {
242 inputs.put(input.getName(), convertInput(input, new org.onap.vid.asdc.beans.tosca.Input(), null));
247 private Node populateNodeFromNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode) {
248 newNode.setCustomizationUuid(csarHelper.getNodeTemplateCustomizationUuid(nodeTemplate));
249 newNode.setDescription(nodeTemplate.getMetaData().getValue(Constants.description));
250 newNode.setInvariantUuid(nodeTemplate.getMetaData().getValue(Constants.invariantUUID));
251 newNode.setUuid(nodeTemplate.getMetaData().getValue(Constants.uuid));
252 newNode.setName(nodeTemplate.getMetaData().getValue(Constants.name));
253 newNode.setVersion(nodeTemplate.getMetaData().getValue(Constants.version));
254 newNode.setInputs(extractInputsAndCommandsForNodeTemplate(nodeTemplate, csarHelper, newNode));
255 newNode.setType(nodeTemplate.getMetaData().getValue("type"));
256 Map<String, String> propertiesMap = setPropertiesOfVnf(nodeTemplate.getPropertiesObjects());
257 newNode.setProperties(propertiesMap);
261 private VfModule populateVfModuleFromGroup(Group group){
262 VfModule vfModule = new VfModule();
264 vfModule.setVersion(group.getMetadata().getValue(Constants.vfModuleModelVersion));
265 vfModule.setCustomizationUuid(group.getMetadata().getValue(Constants.vfModuleModelCustomizationUUID));
266 vfModule.setModelCustomizationName(group.getMetadata().getValue(Constants.vfModuleModelName));
267 vfModule.setName(group.getMetadata().getValue(Constants.vfModuleModelName));
268 vfModule.setVolumeGroupAllowed(isVolumeGroup(group));
269 vfModule.setDescription(group.getDescription());
270 vfModule.setInvariantUuid(group.getMetadata().getValue(Constants.vfModuleModelInvariantUUID));
271 vfModule.setUuid(group.getMetadata().getValue(Constants.vfModuleModelUUID));
272 vfModule.setProperties(group.getProperties());
276 private VolumeGroup populateVolumeGroupFromGroup(Group group){
277 VolumeGroup volumeGroup = new VolumeGroup();
278 volumeGroup.setDescription(group.getDescription());
279 volumeGroup.setInvariantUuid(group.getMetadata().getValue(Constants.vfModuleModelInvariantUUID));
280 volumeGroup.setName(group.getMetadata().getValue(Constants.vfModuleModelName));
281 volumeGroup.setModelCustomizationName(group.getMetadata().getValue(Constants.vfModuleModelName));
282 volumeGroup.setVersion(group.getMetadata().getValue(Constants.vfModuleModelVersion));
283 volumeGroup.setUuid(group.getMetadata().getValue(Constants.vfModuleModelUUID));
284 volumeGroup.setCustomizationUuid(group.getMetadata().getValue(Constants.vfModuleModelCustomizationUUID));
290 private Map<String, org.onap.vid.asdc.beans.tosca.Input> extractInputsAndCommandsForNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode){
291 Map<String, org.onap.vid.asdc.beans.tosca.Input> inputMap = new HashMap<>();
292 Map<String, CommandProperty> commandPropertyMap = new HashMap<>();
294 List<Input> inputs = csarHelper.getServiceInputs();
295 Map<String, String> properties = csarHelper.filterNodeTemplatePropertiesByValue(nodeTemplate, FilterType.CONTAINS, Constants.getInput);
296 for (Map.Entry<String, String> property : properties.entrySet()) {
297 String inputKey = property.getValue();
298 String key = extractInputValue(inputKey);
299 for (Input input: inputs){
300 if(input.getName().equals(key)){
301 org.onap.vid.asdc.beans.tosca.Input localInput = new org.onap.vid.asdc.beans.tosca.Input();
302 localInput = convertInput(input, localInput, nodeTemplate);
303 String name = property.getKey();
304 commandPropertyMap.put(name, extractCommands(name, key));
305 inputMap.put(name, localInput);
309 newNode.setCommands(commandPropertyMap);
313 private String extractInputValue(String inputKey) {
314 return inputKey.substring(inputKey.indexOf(":") + 1);
317 private org.onap.vid.asdc.beans.tosca.Input convertInput(Input parserInput, org.onap.vid.asdc.beans.tosca.Input localInput, NodeTemplate nodeTemplate){
318 localInput.setDefault(parserInput.getDefault());
319 localInput.setDescription(parserInput.getDescription());
320 localInput.setRequired(parserInput.isRequired());
321 localInput.setType(parserInput.getType());
322 localInput.setConstraints(parserInput.getConstraints());
323 // localInput.setentry_schema()
325 //if inputs of inner nodeTemplate - tell its details
326 if(nodeTemplate != null) {
327 Metadata metadata = nodeTemplate.getMetaData();
328 localInput.setTemplateName(metadata.getValue("name"));
329 localInput.setTemplateUUID(metadata.getValue("UUID"));
330 localInput.setTemplateInvariantUUID(metadata.getValue("invariantUUID"));
331 localInput.setTemplateCustomizationUUID(metadata.getValue("customizationUUID"));
337 private CommandProperty extractCommands(String displayName, String inputName){
338 CommandProperty commandProperty = new CommandProperty();
339 commandProperty.setDisplayName(displayName);
340 commandProperty.setCommand(Constants.getInput);
341 commandProperty.setInputName(inputName);
342 return commandProperty;
345 private Map<String, String> setPropertiesOfVnf(List<Property> properties) {
346 Map<String, String> propertiesMap = new HashMap<String, String>();
347 for (Property property : properties) {
348 propertiesMap.put(property.getName(), property.getValue().toString());
350 return propertiesMap;
353 private String validateInstantiationType(ISdcCsarHelper csarHelper){
354 String instantiationType = csarHelper.getServiceMetadata().getValue(Constants.instantiationType);
355 String validatedInstantiationType = Constants.clientConfig;
356 if(instantiationType != null && !instantiationType.isEmpty()){
357 if(instantiationType.equalsIgnoreCase(Constants.macro) || instantiationType.equalsIgnoreCase(Constants.both))
358 validatedInstantiationType = Constants.macro;
359 else if(instantiationType.equalsIgnoreCase(Constants.aLaCarte))
360 validatedInstantiationType = Constants.aLaCarte;
362 return validatedInstantiationType;