1 package org.openecomp.sdc.vendorsoftwareproduct.utils;
3 import org.apache.commons.collections4.CollectionUtils;
4 import org.apache.commons.lang.StringUtils;
5 import org.openecomp.core.utilities.json.JsonUtil;
6 import org.openecomp.sdc.generator.datatypes.tosca.ComputeFlavor;
7 import org.openecomp.sdc.generator.datatypes.tosca.DeploymentFlavorModel;
8 import org.openecomp.sdc.generator.datatypes.tosca.LicenseFlavor;
9 import org.openecomp.sdc.generator.datatypes.tosca.MultiFlavorVfcImage;
10 import org.openecomp.sdc.generator.datatypes.tosca.VendorInfo;
11 import org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity;
12 import org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupModel;
13 import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacade;
14 import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacadeFactory;
15 import org.openecomp.sdc.vendorsoftwareproduct.ComponentManager;
16 import org.openecomp.sdc.vendorsoftwareproduct.ComponentManagerFactory;
17 import org.openecomp.sdc.vendorsoftwareproduct.ComputeManager;
18 import org.openecomp.sdc.vendorsoftwareproduct.ComputeManagerFactory;
19 import org.openecomp.sdc.vendorsoftwareproduct.DeploymentFlavorManager;
20 import org.openecomp.sdc.vendorsoftwareproduct.DeploymentFlavorManagerFactory;
21 import org.openecomp.sdc.vendorsoftwareproduct.ImageManager;
22 import org.openecomp.sdc.vendorsoftwareproduct.ImageManagerFactory;
23 import org.openecomp.sdc.vendorsoftwareproduct.NicManager;
24 import org.openecomp.sdc.vendorsoftwareproduct.NicManagerFactory;
25 import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
26 import org.openecomp.sdc.vendorsoftwareproduct.VspManagerFactory;
27 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.DeploymentFlavorEntity;
28 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
29 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
30 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
31 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
32 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
33 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentComputeAssociation;
34 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData;
35 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.DeploymentFlavor;
36 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Image;
37 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
38 import org.openecomp.sdc.vendorsoftwareproduct.types.questionnaire.component.compute.Compute;
39 import org.openecomp.sdc.vendorsoftwareproduct.types.questionnaire.component.image.ImageDetails;
40 import org.openecomp.sdc.versioning.dao.types.Version;
42 import java.util.ArrayList;
43 import java.util.Collection;
44 import java.util.HashMap;
45 import java.util.List;
47 import java.util.Objects;
48 import java.util.Optional;
51 public class ManualVspDataCollectionService {
53 private static final DeploymentFlavorManager deploymentFlavorManager =
54 DeploymentFlavorManagerFactory.getInstance().createInterface();
55 private static final ComputeManager computeManager =
56 ComputeManagerFactory.getInstance().createInterface();
57 private static final ImageManager imageManager =
58 ImageManagerFactory.getInstance().createInterface();
59 private static final ComponentManager componentManager =
60 ComponentManagerFactory.getInstance().createInterface();
61 private static final VendorSoftwareProductManager vendorSoftwareProductManager =
62 VspManagerFactory.getInstance().createInterface();
63 private static final NicManager nicManager =
64 NicManagerFactory.getInstance().createInterface();
65 private static final VendorLicenseFacade vendorLicenseFacade =
66 VendorLicenseFacadeFactory.getInstance().createInterface();
70 * Gets vendor name for the vsp.
72 * @param vspId the vsp id
73 * @param version the version
74 * @param user the user
75 * @return the release vendor name
77 public Optional<String> getReleaseVendor(String vspId, Version version, String user) {
78 String vendorName = null;
79 VspDetails vspDetails = vendorSoftwareProductManager.getVsp(vspId, version, user);
80 if (Objects.nonNull(vspDetails)) {
81 vendorName = vspDetails.getVendorName();
83 return Optional.ofNullable(vendorName);
87 * Gets the deployment flavor data for manually onboarded VSPs.
89 * @param vspId the vsp id
90 * @param version the version
91 * @param user the user
92 * @return the allowed flavors
94 public Map<String, DeploymentFlavorModel> getAllowedFlavors(String vspId, Version version,
96 Map<String, DeploymentFlavorModel> allowedFlavors = new HashMap<>();
97 Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
98 deploymentFlavorManager.listDeploymentFlavors(vspId, version, user);
99 if (CollectionUtils.isNotEmpty(deploymentFlavorEntities)) {
100 for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
101 DeploymentFlavor deploymentFlavorCompositionData =
102 deploymentFlavorEntity.getDeploymentFlavorCompositionData();
104 VspDetails vspDetails = vendorSoftwareProductManager.getVsp(vspId, version, user);
107 if (Objects.nonNull(vspDetails)) {
108 vspVlmId = vspDetails.getVendorId();
109 vlmVersion = vspDetails.getVlmVersion();
110 if (StringUtils.isNotEmpty(vspVlmId)) {
111 DeploymentFlavorModel deploymentFlavorModel = new DeploymentFlavorModel();
112 String featureGroupId = deploymentFlavorCompositionData.getFeatureGroupId();
113 if (Objects.isNull(featureGroupId)) {
114 //No feature group associated with deployment flavor. So excluding this deployment
115 // flavor for Tosca model
118 //Gather and set License flavor info
119 LicenseFlavor licenseFlavor = getLicenseFlavor(featureGroupId);
120 deploymentFlavorModel.setLicense_flavor(licenseFlavor);
122 Optional<String> partNumber = getPartNumber(vspVlmId, vlmVersion, featureGroupId,
124 partNumber.ifPresent(deploymentFlavorModel::setSp_part_number);
125 //Gather and set Vendor Info
126 Optional<VendorInfo> vendorInfo = getVendorInfo(vspVlmId, vlmVersion, featureGroupId,
128 vendorInfo.ifPresent(deploymentFlavorModel::setVendor_info);
129 //Gather and set Compute info
130 List<ComponentComputeAssociation> componentComputeAssociations =
131 deploymentFlavorCompositionData.getComponentComputeAssociations();
132 if (CollectionUtils.isNotEmpty(componentComputeAssociations)) {
133 for (ComponentComputeAssociation componentComputeAssociation :
134 componentComputeAssociations) {
135 String componentId = componentComputeAssociation.getComponentId();
136 String computeFlavorId = componentComputeAssociation.getComputeFlavorId();
137 Optional<ComputeFlavor> computeFlavor =
138 getComputeFlavor(vspId, version, componentId, computeFlavorId, user);
139 computeFlavor.ifPresent(deploymentFlavorModel::setCompute_flavor);
142 partNumber.ifPresent(spPartNumber -> allowedFlavors.put(spPartNumber,
143 deploymentFlavorModel));
148 return allowedFlavors;
152 * Gets the component image data for manually onboarded VSPs.
154 * @param vspId the vsp id
155 * @param version the version
156 * @param user the user
157 * @return the vsp component images
159 public Map<String, List<MultiFlavorVfcImage>> getVspComponentImages(String vspId,
162 Map<String, List<MultiFlavorVfcImage>> vspComponentImages = new HashMap<>();
163 Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
164 deploymentFlavorManager.listDeploymentFlavors(vspId, version, user);
165 for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
166 DeploymentFlavor deploymentFlavorCompositionData =
167 deploymentFlavorEntity.getDeploymentFlavorCompositionData();
169 List<ComponentComputeAssociation> componentComputeAssociations =
170 deploymentFlavorCompositionData.getComponentComputeAssociations();
171 if (CollectionUtils.isNotEmpty(componentComputeAssociations)) {
172 for (ComponentComputeAssociation componentComputeAssociation :
173 componentComputeAssociations) {
174 String componentId = componentComputeAssociation.getComponentId();
175 List<MultiFlavorVfcImage> componentImages =
176 getComponentImages(vspId, version, componentId, user);
177 if (CollectionUtils.isNotEmpty(componentImages)) {
178 vspComponentImages.put(componentId, componentImages);
183 return vspComponentImages;
187 * Gets the component data for manually onboarded VSPs.
189 * @param vspId the vsp id
190 * @param version the version
191 * @param user the user
192 * @return the vsp components
194 public Map<String, String> getVspComponents(String vspId, Version version, String user) {
195 Map<String, String> componentIdNameMap = new HashMap<>();
196 Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
197 deploymentFlavorManager.listDeploymentFlavors(vspId, version, user);
198 for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
199 DeploymentFlavor deploymentFlavorCompositionData =
200 deploymentFlavorEntity.getDeploymentFlavorCompositionData();
202 List<ComponentComputeAssociation> componentComputeAssociations =
203 deploymentFlavorCompositionData.getComponentComputeAssociations();
204 if (CollectionUtils.isNotEmpty(componentComputeAssociations)) {
205 for (ComponentComputeAssociation componentComputeAssociation :
206 componentComputeAssociations) {
207 String componentId = componentComputeAssociation.getComponentId();
208 Optional<String> componentName = getComponentName(vspId, version, componentId, user);
209 componentName.ifPresent(name -> componentIdNameMap.put(componentId, name));
213 return componentIdNameMap;
217 * Gets the NIC data for manually onboarded VSPs.
219 * @param vspId the vsp id
220 * @param version the version
221 * @param user the user
222 * @return the vsp component nics
224 public Map<String, List<Nic>> getVspComponentNics(String vspId, Version version, String user) {
225 Map<String, List<Nic>> vspComponentNics = new HashMap<>();
226 Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
227 deploymentFlavorManager.listDeploymentFlavors(vspId, version, user);
228 if (CollectionUtils.isNotEmpty(deploymentFlavorEntities)) {
229 for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
230 DeploymentFlavor deploymentFlavorCompositionData =
231 deploymentFlavorEntity.getDeploymentFlavorCompositionData();
232 if (Objects.nonNull(deploymentFlavorCompositionData)) {
233 List<ComponentComputeAssociation> componentComputeAssociations =
234 deploymentFlavorCompositionData.getComponentComputeAssociations();
235 if (CollectionUtils.isNotEmpty(componentComputeAssociations)) {
236 for (ComponentComputeAssociation componentComputeAssociation :
237 componentComputeAssociations) {
238 String componentId = componentComputeAssociation.getComponentId();
239 List<Nic> componentNics = getComponentNics(vspId, version, componentId, user);
240 if (CollectionUtils.isNotEmpty(componentNics)) {
241 vspComponentNics.put(componentId, componentNics);
248 return vspComponentNics;
251 private List<Nic> getComponentNics(String vspId, Version version, String componentId,
253 List<Nic> componentNics = new ArrayList<>();
254 Collection<NicEntity> nics = nicManager.listNics(vspId, version, componentId, user);
255 if (Objects.nonNull(nics)) {
256 for (NicEntity nicEntity : nics) {
257 String nicId = nicEntity.getId();
258 CompositionEntityResponse<Nic> nicCompositionEntityResponse =
259 nicManager.getNic(vspId, version, componentId, nicId, user);
260 if (Objects.nonNull(nicCompositionEntityResponse)
261 && Objects.nonNull(nicCompositionEntityResponse.getData())) {
262 componentNics.add(nicCompositionEntityResponse.getData());
266 return componentNics;
269 private LicenseFlavor getLicenseFlavor(String featureGroupId) {
270 LicenseFlavor licenseFlavor = new LicenseFlavor();
271 licenseFlavor.setFeature_group_uuid(featureGroupId);
272 return licenseFlavor;
275 private Optional<String> getPartNumber(String vlmId, Version version,
276 String featureGroupId, String user) {
277 FeatureGroupModel featureGroup = getFeatureGroup(vlmId, version, featureGroupId, user);
278 if (Objects.nonNull(featureGroup)) {
279 return Optional.ofNullable(featureGroup.getFeatureGroup().getPartNumber());
281 return Optional.empty();
284 private Optional<VendorInfo> getVendorInfo(String vlmId, Version version,
285 String featureGroupId, String user) {
286 VendorInfo vendorInfo = null;
287 FeatureGroupModel featureGroup = getFeatureGroup(vlmId, version, featureGroupId, user);
288 if (Objects.nonNull(featureGroup)) {
289 //Process Feature group to get Manufacturer ref no.
290 String manufacturerReferenceNumber = featureGroup.getEntityManufacturerReferenceNumber();
291 vendorInfo = new VendorInfo();
292 vendorInfo.setVendor_model(vlmId);
293 if (Objects.nonNull(manufacturerReferenceNumber)) {
294 vendorInfo.setManufacturer_reference_number(manufacturerReferenceNumber);
297 return Optional.ofNullable(vendorInfo);
300 private Optional<ComputeFlavor> getComputeFlavor(String vspId, Version version,
301 String componentId, String computeFlavorId,
303 ComputeFlavor computeFlavor = null;
304 QuestionnaireResponse computeQuestionnaire;
306 computeQuestionnaire = computeManager.getComputeQuestionnaire(vspId, version, componentId,
307 computeFlavorId, user);
308 } catch (Exception ex) {
309 computeQuestionnaire = null;
311 if (Objects.nonNull(computeQuestionnaire)) {
312 String computeQuestionnaireData = computeQuestionnaire.getData();
313 if (Objects.nonNull(computeQuestionnaireData)) {
316 compute = JsonUtil.json2Object(computeQuestionnaireData, Compute.class);
317 } catch (Exception ex) {
320 if (Objects.nonNull(compute.getVmSizing())) {
321 computeFlavor = new ComputeFlavor();
322 if (Objects.nonNull(compute.getVmSizing().getNumOfCPUs())) {
323 computeFlavor.setNum_cpus(compute.getVmSizing().getNumOfCPUs());
325 if (Objects.nonNull(compute.getVmSizing().getFileSystemSizeGB())) {
326 computeFlavor.setDisk_size(compute.getVmSizing().getFileSystemSizeGB() + "GB");
328 if (Objects.nonNull(compute.getVmSizing().getMemoryRAM())) {
329 computeFlavor.setMem_size(compute.getVmSizing().getMemoryRAM() + "GB");
334 return Optional.ofNullable(computeFlavor);
337 private FeatureGroupModel getFeatureGroup(String vlmId, Version version, String featureGroupId,
339 FeatureGroupEntity fgInput = new FeatureGroupEntity();
340 fgInput.setVendorLicenseModelId(vlmId);
341 fgInput.setVersion(version);
342 fgInput.setId(featureGroupId);
343 return vendorLicenseFacade.getFeatureGroupModel(fgInput, user);
346 private Optional<String> getComponentName(String vspId, Version version, String componentId,
348 CompositionEntityResponse<ComponentData> component =
349 componentManager.getComponent(vspId, version, componentId, user);
350 if (Objects.nonNull(component.getData())) {
351 return Optional.ofNullable(component.getData().getDisplayName());
353 return Optional.empty();
356 private List<MultiFlavorVfcImage> getComponentImages(String vspId, Version version,
357 String componentId, String user) {
358 List<MultiFlavorVfcImage> componentImages = new ArrayList<>();
359 MultiFlavorVfcImage multiFlavorVfcImage = null;
360 Collection<ImageEntity> imageEntities =
361 imageManager.listImages(vspId, version, componentId, user);
362 if (Objects.nonNull(imageEntities)) {
363 for (ImageEntity imageEntity : imageEntities) {
364 String imageId = imageEntity.getId();
365 QuestionnaireResponse imageQuestionnaire =
366 imageManager.getImageQuestionnaire(vspId, version, componentId, imageId, user);
367 CompositionEntityResponse<Image> imageCompositionData =
368 imageManager.getImage(vspId, version, componentId, imageId, user);
369 if (Objects.nonNull(imageQuestionnaire)
370 && Objects.nonNull(imageQuestionnaire.getData())
371 && Objects.nonNull(imageCompositionData)) {
372 ImageDetails imageDetails;
374 imageDetails = JsonUtil.json2Object(imageQuestionnaire.getData(),
376 } catch (Exception ex) {
379 if (Objects.nonNull(imageDetails)
380 && Objects.nonNull(imageDetails.getVersion())) {
381 //Image version is used as a key for the image block
382 //So excluding the population if questionnaire data is absent or invalid
383 multiFlavorVfcImage = new MultiFlavorVfcImage();
384 Image image = imageCompositionData.getData();
385 Optional<String> toscaImageFileName = getToscaImageFileName(image, imageDetails);
386 toscaImageFileName.ifPresent(multiFlavorVfcImage::setFile_name);
387 multiFlavorVfcImage.setSoftware_version(imageDetails.getVersion());
388 if (Objects.nonNull(imageDetails.getMd5())) {
389 multiFlavorVfcImage.setFile_hash(imageDetails.getMd5());
391 multiFlavorVfcImage.setFile_hash_type("md5");
392 componentImages.add(multiFlavorVfcImage);
397 return componentImages;
400 private Optional<String> getToscaImageFileName(Image image, ImageDetails imageDetails) {
401 String toscaImageFileName = null;
402 StringBuilder builder = new StringBuilder();
403 if (Objects.nonNull(image.getFileName())) {
404 builder.append(image.getFileName());
406 builder.append(imageDetails.getVersion());
407 if (Objects.nonNull(imageDetails.getFormat())) {
409 builder.append(imageDetails.getFormat());
412 toscaImageFileName = builder.toString();
413 if (toscaImageFileName.isEmpty()) {
414 return Optional.empty();
416 return Optional.ofNullable(toscaImageFileName);