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.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.*;
15 import java.nio.file.Path;
16 import java.util.HashMap;
17 import java.util.List;
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 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";
41 public ToscaParserImpl2() {
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));
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();
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));
71 private Map<String, VNF> extractVnfsFromCsar(ISdcCsarHelper csarHelper) {
72 List<NodeTemplate> nodeTemplates = csarHelper.getServiceVfList();
73 Map<String, VNF> vnfsMaps = new HashMap<String, VNF>();
75 for (NodeTemplate nodeTemplate : nodeTemplates) {
77 populateNodeFromNodeTemplate(nodeTemplate, csarHelper, vnf);
78 vnf.setModelCustomizationName(nodeTemplate.getName());
79 vnfsMaps.put(nodeTemplate.getName(), vnf);
84 private Map<String, Network> extractNetworksFromCsar(ISdcCsarHelper csarHelper) {
85 List<NodeTemplate> nodeTemplates = csarHelper.getServiceVlList();
86 Map<String, Network> networksMap = new HashMap<String, Network>();
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);
97 private Map<String, VfModule> extractVfModuleFromCsar(ISdcCsarHelper csarHelper) {
98 List<NodeTemplate> serviceVfList = csarHelper.getServiceVfList();
99 HashMap<String, VfModule> vfModuleHashMap = new HashMap<>();
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));
107 return vfModuleHashMap;
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());
118 volumeGroupHashMap.put(group.getName(), populateVolumeGroupFromGroup(group));
122 return volumeGroupHashMap;
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()));
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);
146 private VfModule populateVfModuleFromGroup(Group group){
147 VfModule vfModule = new VfModule();
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));
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));
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<>();
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);
191 newNode.setCommands(commandPropertyMap);
195 private String extractInputValue(String inputKey) {
196 return inputKey.substring(inputKey.indexOf(":") + 1);
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()
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;
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());
222 return propertiesMap;