Upgrade sonar plugin
[vid.git] / vid-app-common / src / main / java / org / openecomp / vid / asdc / parser / ToscaParserImpl2.java
1 package org.openecomp.vid.asdc.parser;
2
3 import org.openecomp.sdc.tosca.parser.api.ISdcCsarHelper;
4 import org.openecomp.sdc.tosca.parser.exceptions.SdcToscaParserException;
5 import org.openecomp.sdc.tosca.parser.impl.FilterType;
6 import org.openecomp.sdc.tosca.parser.impl.SdcToscaParserFactory;
7 import org.openecomp.sdc.toscaparser.api.Group;
8 import org.openecomp.sdc.toscaparser.api.NodeTemplate;
9 import org.openecomp.sdc.toscaparser.api.Property;
10 import org.openecomp.sdc.toscaparser.api.parameters.Input;
11 import org.openecomp.vid.asdc.beans.Service;
12 import org.openecomp.vid.model.*;
13
14 import java.nio.file.Path;
15 import java.util.HashMap;
16 import java.util.List;
17 import java.util.Map;
18
19 public class ToscaParserImpl2 {
20
21     
22         public class Constants {
23                 public final static String uuid = "UUID";
24                 public final static String description = "description";
25                 public final static String serviceType = "serviceType";
26         public final static String serviceRole = "serviceRole";
27         public final static String ecompGeneratedNaming = "ecompGeneratedNaming";
28
29         public final static String customizationUUID = "customizationUUID";
30                 public final static String vfModuleModelVersion = "vfModuleModelVersion";
31                 public final static String vfModuleModelCustomizationUUID = "vfModuleModelCustomizationUUID";
32                 public final static String volume_group = "volume_group";
33                 public final static String vfModuleModelInvariantUUID = "vfModuleModelInvariantUUID";
34                 public final static String vfModuleModelUUID = "vfModuleModelUUID";
35                 public final static String invariantUUID = "invariantUUID";
36                 public final static String version = "version";
37                 public final static String name = "name";
38                 public final static String category = "category";
39                 public final static String vfModuleModelName = "vfModuleModelName";
40                 public final static String getInput = "get_input";
41         }
42         
43         public ToscaParserImpl2() {
44
45     }
46
47     public ServiceModel makeServiceModel(Path path, Service asdcServiceMetadata) throws Exception {
48         ServiceModel serviceModel = new ServiceModel();
49         SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance();
50         ISdcCsarHelper sdcCsarHelper = factory.getSdcCsarHelper(path.toFile().getAbsolutePath()); //, false);
51         serviceModel.setService(extractServiceFromCsar(asdcServiceMetadata, sdcCsarHelper));
52         serviceModel.setVolumeGroups(extractVolumeGroups(sdcCsarHelper));
53         serviceModel.setVfModules(extractVfModuleFromCsar(sdcCsarHelper));
54         serviceModel.setVnfs(extractVnfsFromCsar(serviceModel,sdcCsarHelper));
55         serviceModel.setNetworks(extractNetworksFromCsar(sdcCsarHelper));
56         return serviceModel;
57     }
58
59     private  org.openecomp.vid.model.Service extractServiceFromCsar(Service asdcServiceMetadata, ISdcCsarHelper csarHelper) throws SdcToscaParserException {
60         org.openecomp.vid.model.Service service = new  org.openecomp.vid.model.Service();
61
62         service.setName(csarHelper.getServiceMetadata().getValue(Constants.name));
63         service.setCategory(csarHelper.getServiceMetadata().getValue(Constants.category));
64         service.setInvariantUuid(csarHelper.getServiceMetadata().getValue(Constants.invariantUUID));
65         service.setUuid(csarHelper.getServiceMetadata().getValue(Constants.uuid));
66         service.setVersion(asdcServiceMetadata.getVersion());
67         service.setDescription(csarHelper.getServiceMetadata().getValue(Constants.description));
68         service.setInputs(inputsListToInputsMap(csarHelper.getServiceInputs()));
69         service.setServiceEcompNaming(csarHelper.getServiceMetadata().getValue(Constants.ecompGeneratedNaming));
70         service.setServiceType(csarHelper.getServiceMetadata().getValue(Constants.serviceType));
71         service.setServiceRole(csarHelper.getServiceMetadata().getValue(Constants.serviceRole));
72
73         return service;
74     }
75     
76     private Map<String, VNF> extractVnfsFromCsar(ServiceModel serviceModel,ISdcCsarHelper csarHelper) {
77         List<NodeTemplate> nodeTemplates = csarHelper.getServiceVfList();
78         Map<String, VNF> vnfsMaps = new HashMap<String, VNF>();
79
80         for (NodeTemplate nodeTemplate : nodeTemplates) {
81             VNF vnf = new VNF();
82             populateNodeFromNodeTemplate(nodeTemplate, csarHelper, vnf);
83
84             vnf.setModelCustomizationName(nodeTemplate.getName());
85             Map<String, VfModule> vfModuleHashMap = getVfModulesFromVF(csarHelper, vnf.getCustomizationUuid());
86             vnf.setVfModules(vfModuleHashMap);
87
88             Map<String, VolumeGroup> volumeGroupMap = getVolumeGroupsFromVF(csarHelper, vnf.getCustomizationUuid());
89             vnf.setVolumeGroups(volumeGroupMap);
90
91             vnfsMaps.put(nodeTemplate.getName(), vnf);
92         }
93         return vnfsMaps;
94     }
95
96     private Map<String, VfModule> getVfModulesFromVF(ISdcCsarHelper csarHelper, String vfUuid) {
97         Map<String,VfModule> vfModuleHashMap = new HashMap<String,VfModule>();
98         for (Group group : csarHelper.getVfModulesByVf(vfUuid)) {
99             vfModuleHashMap.put(group.getName(), populateVfModuleFromGroup(group));
100         }
101         return vfModuleHashMap;
102     }
103
104     private Map<String, VolumeGroup> getVolumeGroupsFromVF(ISdcCsarHelper csarHelper, String vfCustomizationUuid) {
105         Map<String,VolumeGroup> volumeGroupMap = new HashMap<String,VolumeGroup>();
106         List<Group> groups = csarHelper.getVfModulesByVf(vfCustomizationUuid);
107         for (Group group : groups) {
108             boolean isVolumeGroup = Boolean.valueOf(group.getPropertyValue(Constants.volume_group).toString());
109             if (isVolumeGroup) {
110                 volumeGroupMap.put(group.getName(), populateVolumeGroupFromGroup(group));
111             }
112         }
113         return volumeGroupMap;
114     }
115
116     private Map<String, Network> extractNetworksFromCsar(ISdcCsarHelper csarHelper) {
117         List<NodeTemplate> nodeTemplates = csarHelper.getServiceVlList();
118         Map<String, Network> networksMap = new HashMap<String, Network>();
119
120         for (NodeTemplate nodeTemplate : nodeTemplates) {
121             Network newNetwork = new Network();
122             populateNodeFromNodeTemplate(nodeTemplate, csarHelper, newNetwork);
123             newNetwork.setModelCustomizationName(nodeTemplate.getName());
124             networksMap.put(nodeTemplate.getName(), newNetwork);
125         }
126         return networksMap;
127     }
128
129     private Map<String, VfModule> extractVfModuleFromCsar(ISdcCsarHelper csarHelper) {
130         List<NodeTemplate> serviceVfList = csarHelper.getServiceVfList();
131         HashMap<String, VfModule> vfModuleHashMap = new HashMap<>();
132
133         for (NodeTemplate nodeTemplate : serviceVfList) {
134             Map<String, VfModule> nodeTemplateVfModule =
135                     getVfModulesFromVF(csarHelper, nodeTemplate.getMetaData().getValue(Constants.customizationUUID));
136             vfModuleHashMap.putAll(nodeTemplateVfModule);
137         }
138         return vfModuleHashMap;
139     }
140
141     private Map<String, VolumeGroup> extractVolumeGroups(ISdcCsarHelper csarHelper) {
142         HashMap<String, VolumeGroup> volumeGroupHashMap = new HashMap<>();
143         for (NodeTemplate nodeTemplate : csarHelper.getServiceVfList()) {
144             Map<String, VolumeGroup> nodeTemplateVolumeGroups =
145                     getVolumeGroupsFromVF(csarHelper, csarHelper.getNodeTemplateCustomizationUuid(nodeTemplate));
146             volumeGroupHashMap.putAll(nodeTemplateVolumeGroups);
147         }
148         return volumeGroupHashMap;
149     }
150
151     private Map<String, org.openecomp.vid.asdc.beans.tosca.Input> inputsListToInputsMap(List<org.openecomp.sdc.toscaparser.api.parameters.Input> inputList) {
152         Map<String, org.openecomp.vid.asdc.beans.tosca.Input> inputs = new HashMap<>();
153         for (org.openecomp.sdc.toscaparser.api.parameters.Input input : inputList) {
154             inputs.put(input.getName(), convertInput(input, new org.openecomp.vid.asdc.beans.tosca.Input()));
155         }
156         return inputs;
157     }
158
159     private Node populateNodeFromNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode) {
160         newNode.setCustomizationUuid(csarHelper.getNodeTemplateCustomizationUuid(nodeTemplate));
161         newNode.setDescription(nodeTemplate.getMetaData().getValue(Constants.description));
162         newNode.setInvariantUuid(nodeTemplate.getMetaData().getValue(Constants.invariantUUID));
163         newNode.setUuid(nodeTemplate.getMetaData().getValue(Constants.uuid));
164         newNode.setName(nodeTemplate.getMetaData().getValue(Constants.name));
165         newNode.setVersion(nodeTemplate.getMetaData().getValue(Constants.version));
166         newNode.setInputs(extractInputsAndCommandsForNodeTemplate(nodeTemplate, csarHelper, newNode));
167         Map<String, String> propertiesMap = setPropertiesOfVnf(nodeTemplate.getPropertiesObjects());
168         newNode.setProperties(propertiesMap);
169         return newNode;
170     }
171
172     private VfModule populateVfModuleFromGroup(Group group){
173         VfModule vfModule = new VfModule();
174
175         vfModule.setVersion(group.getMetadata().getValue(Constants.vfModuleModelVersion));
176         vfModule.setCustomizationUuid(group.getMetadata().getValue(Constants.vfModuleModelCustomizationUUID));
177         vfModule.setModelCustomizationName(group.getMetadata().getValue(Constants.vfModuleModelName));
178         vfModule.setName(group.getMetadata().getValue(Constants.vfModuleModelName));
179         vfModule.setVolumeGroupAllowed(Boolean.valueOf((group.getPropertyValue(Constants.volume_group)).toString()));
180         vfModule.setDescription(group.getDescription());
181         vfModule.setInvariantUuid(group.getMetadata().getValue(Constants.vfModuleModelInvariantUUID));
182         vfModule.setUuid(group.getMetadata().getValue(Constants.vfModuleModelUUID));
183         return vfModule;
184     }
185
186     private VolumeGroup populateVolumeGroupFromGroup(Group group){
187         VolumeGroup volumeGroup = new VolumeGroup();
188         volumeGroup.setDescription(group.getDescription());
189         volumeGroup.setInvariantUuid(group.getMetadata().getValue(Constants.vfModuleModelInvariantUUID));
190         volumeGroup.setName(group.getMetadata().getValue(Constants.vfModuleModelName));
191         volumeGroup.setModelCustomizationName(group.getMetadata().getValue(Constants.vfModuleModelName));
192         volumeGroup.setVersion(group.getMetadata().getValue(Constants.vfModuleModelVersion));
193         volumeGroup.setUuid(group.getMetadata().getValue(Constants.vfModuleModelUUID));
194         volumeGroup.setCustomizationUuid(group.getMetadata().getValue(Constants.vfModuleModelCustomizationUUID));
195
196         return volumeGroup;
197     }
198
199
200     private Map<String, org.openecomp.vid.asdc.beans.tosca.Input> extractInputsAndCommandsForNodeTemplate(NodeTemplate nodeTemplate, ISdcCsarHelper csarHelper, Node newNode){
201         Map<String, org.openecomp.vid.asdc.beans.tosca.Input> inputMap = new HashMap<>();
202         Map<String, CommandProperty> commandPropertyMap = new HashMap<>();
203
204         List<Input> inputs = csarHelper.getServiceInputs();
205         Map<String, String> properties  = csarHelper.filterNodeTemplatePropertiesByValue(nodeTemplate, FilterType.CONTAINS, Constants.getInput);
206         for (Map.Entry<String, String> property : properties.entrySet()) {
207             String inputKey = property.getValue();
208             String key = extractInputValue(inputKey);
209             for (Input input: inputs){
210                 if(input.getName().equals(key)){
211                     org.openecomp.vid.asdc.beans.tosca.Input localInput = new org.openecomp.vid.asdc.beans.tosca.Input();
212                     localInput = convertInput(input, localInput);
213                     String name = property.getKey();
214                     commandPropertyMap.put(name, extractCommands(name, key));
215                     inputMap.put(name, localInput);
216                 }
217             }
218         }
219         newNode.setCommands(commandPropertyMap);
220         return inputMap;
221     }
222
223     private String extractInputValue(String inputKey) {
224         return inputKey.substring(inputKey.indexOf(":") + 1);
225     }
226
227     private org.openecomp.vid.asdc.beans.tosca.Input convertInput(Input parserInput, org.openecomp.vid.asdc.beans.tosca.Input localInput){
228         localInput.setDefault(parserInput.getDefault());
229         localInput.setDescription(parserInput.getDescription());
230         localInput.setRequired(parserInput.isRequired());
231         localInput.setType(parserInput.getType());
232         localInput.setConstraints(parserInput.getConstraints());
233 //        localInput.setentry_schema()
234         return localInput;
235     }
236
237     private CommandProperty extractCommands(String displayName, String inputName){
238         CommandProperty commandProperty = new CommandProperty();
239         commandProperty.setDisplayName(displayName);
240         commandProperty.setCommand(Constants.getInput);
241         commandProperty.setInputName(inputName);
242         return commandProperty;
243     }
244
245     private Map<String, String> setPropertiesOfVnf(List<Property> properties) {
246         Map<String, String> propertiesMap = new HashMap<String, String>();
247         for (Property property : properties) {
248             propertiesMap.put(property.getName(), property.getValue().toString());
249         }
250         return propertiesMap;
251     }
252
253
254 }