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