1 package org.openecomp.vid.asdc.parser;
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.*;
14 import java.nio.file.Path;
15 import java.util.HashMap;
16 import java.util.List;
19 public class ToscaParserImpl2 {
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";
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";
43 public ToscaParserImpl2() {
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));
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();
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));
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>();
80 for (NodeTemplate nodeTemplate : nodeTemplates) {
82 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, vnf);
84 vnf.setModelCustomizationName(nodeTemplate.getName());
85 Map<String, VfModule> vfModuleHashMap = getVfModulesFromVF(csarHelper, vnf.getCustomizationUuid());
86 vnf.setVfModules(vfModuleHashMap);
88 Map<String, VolumeGroup> volumeGroupMap = getVolumeGroupsFromVF(csarHelper, vnf.getCustomizationUuid());
89 vnf.setVolumeGroups(volumeGroupMap);
91 vnfsMaps.put(nodeTemplate.getName(), vnf);
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));
101 return vfModuleHashMap;
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());
110 volumeGroupMap.put(group.getName(), populateVolumeGroupFromGroup(group));
113 return volumeGroupMap;
116 private Map<String, Network> extractNetworksFromCsar(ISdcCsarHelper csarHelper) {
117 List<NodeTemplate> nodeTemplates = csarHelper.getServiceVlList();
118 Map<String, Network> networksMap = new HashMap<String, Network>();
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);
129 private Map<String, VfModule> extractVfModuleFromCsar(ISdcCsarHelper csarHelper) {
130 List<NodeTemplate> serviceVfList = csarHelper.getServiceVfList();
131 HashMap<String, VfModule> vfModuleHashMap = new HashMap<>();
133 for (NodeTemplate nodeTemplate : serviceVfList) {
134 Map<String, VfModule> nodeTemplateVfModule =
135 getVfModulesFromVF(csarHelper, nodeTemplate.getMetaData().getValue(Constants.customizationUUID));
136 vfModuleHashMap.putAll(nodeTemplateVfModule);
138 return vfModuleHashMap;
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);
148 return volumeGroupHashMap;
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()));
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);
172 private VfModule populateVfModuleFromGroup(Group group){
173 VfModule vfModule = new VfModule();
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));
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));
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<>();
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);
219 newNode.setCommands(commandPropertyMap);
223 private String extractInputValue(String inputKey) {
224 return inputKey.substring(inputKey.indexOf(":") + 1);
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()
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;
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());
250 return propertiesMap;