1 package org.openecomp.sdc.vendorsoftwareproduct.services;
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.logging.api.Logger;
12 import org.openecomp.sdc.logging.api.LoggerFactory;
13 import org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity;
14 import org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupModel;
15 import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacade;
16 import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacadeFactory;
17 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
18 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDaoFactory;
19 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDao;
20 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDaoFactory;
21 import org.openecomp.sdc.vendorsoftwareproduct.dao.DeploymentFlavorDao;
22 import org.openecomp.sdc.vendorsoftwareproduct.dao.DeploymentFlavorDaoFactory;
23 import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDao;
24 import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDaoFactory;
25 import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDao;
26 import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDaoFactory;
27 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
28 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDaoFactory;
29 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
30 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
31 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.DeploymentFlavorEntity;
32 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
33 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
34 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
35 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentComputeAssociation;
36 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData;
37 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.DeploymentFlavor;
38 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Image;
39 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
40 import org.openecomp.sdc.vendorsoftwareproduct.types.questionnaire.component.compute.Compute;
41 import org.openecomp.sdc.vendorsoftwareproduct.types.questionnaire.component.image.ImageDetails;
42 import org.openecomp.sdc.versioning.dao.types.Version;
44 import java.util.ArrayList;
45 import java.util.Collection;
46 import java.util.HashMap;
47 import java.util.List;
49 import java.util.Objects;
50 import java.util.Optional;
53 public class ManualVspDataCollectionService {
55 private static final VendorSoftwareProductInfoDao vendorSoftwareProductInfoDao =
56 VendorSoftwareProductInfoDaoFactory.getInstance().createInterface();
57 private static final DeploymentFlavorDao deploymentFlavorDao =
58 DeploymentFlavorDaoFactory.getInstance().createInterface();
59 private static final ComputeDao computeDao =
60 ComputeDaoFactory.getInstance().createInterface();
61 private static final ImageDao imageDao =
62 ImageDaoFactory.getInstance().createInterface();
63 private static final ComponentDao componentDao =
64 ComponentDaoFactory.getInstance().createInterface();
66 private static final NicDao nicDao =
67 NicDaoFactory.getInstance().createInterface();
68 private static final VendorLicenseFacade vendorLicenseFacade =
69 VendorLicenseFacadeFactory.getInstance().createInterface();
71 private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
74 * Gets vendor name for the vsp.
76 * @param vspId the vsp id
77 * @param version the version
78 * @return the release vendor name
80 public Optional<String> getReleaseVendor(String vspId, Version version) {
81 String vendorName = null;
82 VspDetails vspDetails = vendorSoftwareProductInfoDao.get(new VspDetails(vspId, version));
83 if (Objects.nonNull(vspDetails)) {
84 vendorName = vspDetails.getVendorName();
86 return Optional.ofNullable(vendorName);
90 * Gets the deployment flavor data for manually onboarded VSPs.
92 * @param vspId the vsp id
93 * @param version the version
94 * @return the allowed flavors
96 public Map<String, DeploymentFlavorModel> getAllowedFlavors(String vspId, Version version) {
97 Map<String, DeploymentFlavorModel> allowedFlavors = new HashMap<>();
98 Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
99 deploymentFlavorDao.list(new DeploymentFlavorEntity(vspId, version, null));
100 if (CollectionUtils.isNotEmpty(deploymentFlavorEntities)) {
101 for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
102 DeploymentFlavor deploymentFlavorCompositionData =
103 deploymentFlavorEntity.getDeploymentFlavorCompositionData();
105 VspDetails vspDetails = vendorSoftwareProductInfoDao.get(new VspDetails(vspId, version));
108 if (Objects.nonNull(vspDetails)) {
109 vspVlmId = vspDetails.getVendorId();
110 vlmVersion = vspDetails.getVlmVersion();
111 if (StringUtils.isNotEmpty(vspVlmId)) {
112 DeploymentFlavorModel deploymentFlavorModel = new DeploymentFlavorModel();
113 String featureGroupId = deploymentFlavorCompositionData.getFeatureGroupId();
114 if (Objects.isNull(featureGroupId)) {
115 //No feature group associated with deployment flavor. So excluding this deployment
116 // flavor for Tosca model
119 //Gather and set License flavor info
120 LicenseFlavor licenseFlavor = getLicenseFlavor(featureGroupId);
121 deploymentFlavorModel.setLicense_flavor(licenseFlavor);
123 Optional<String> partNumber = getPartNumber(vspVlmId, vlmVersion, featureGroupId);
124 partNumber.ifPresent(deploymentFlavorModel::setSp_part_number);
125 //Gather and set Vendor Info
126 String vendorModel = deploymentFlavorCompositionData.getModel();
127 Optional<VendorInfo> vendorInfo = getVendorInfo(vspVlmId, vendorModel, vlmVersion,
129 vendorInfo.ifPresent(deploymentFlavorModel::setVendor_info);
130 //Gather and set Compute info
131 List<ComponentComputeAssociation> componentComputeAssociations =
132 deploymentFlavorCompositionData.getComponentComputeAssociations();
133 if (CollectionUtils.isNotEmpty(componentComputeAssociations)) {
134 for (ComponentComputeAssociation componentComputeAssociation :
135 componentComputeAssociations) {
136 String componentId = componentComputeAssociation.getComponentId();
137 String computeFlavorId = componentComputeAssociation.getComputeFlavorId();
138 Optional<ComputeFlavor> computeFlavor =
139 getComputeFlavor(vspId, version, componentId, computeFlavorId);
140 computeFlavor.ifPresent(deploymentFlavorModel::setCompute_flavor);
143 partNumber.ifPresent(spPartNumber -> allowedFlavors.put(spPartNumber,
144 deploymentFlavorModel));
149 return allowedFlavors;
153 * Gets the component image data for manually onboarded VSPs.
155 * @param vspId the vsp id
156 * @param version the version
157 * @return the vsp component images
159 public Map<String, List<MultiFlavorVfcImage>> getVspComponentImages(String vspId,
161 Map<String, List<MultiFlavorVfcImage>> vspComponentImages = new HashMap<>();
162 Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
163 deploymentFlavorDao.list(new DeploymentFlavorEntity(vspId, version, null));
164 for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
165 DeploymentFlavor deploymentFlavorCompositionData =
166 deploymentFlavorEntity.getDeploymentFlavorCompositionData();
168 List<ComponentComputeAssociation> componentComputeAssociations =
169 deploymentFlavorCompositionData.getComponentComputeAssociations();
170 if (CollectionUtils.isNotEmpty(componentComputeAssociations)) {
171 for (ComponentComputeAssociation componentComputeAssociation :
172 componentComputeAssociations) {
173 String componentId = componentComputeAssociation.getComponentId();
174 List<MultiFlavorVfcImage> componentImages =
175 getComponentImages(vspId, version, componentId);
176 if (CollectionUtils.isNotEmpty(componentImages)) {
177 vspComponentImages.put(componentId, componentImages);
182 return vspComponentImages;
186 * Gets the component data for manually onboarded VSPs.
188 * @param vspId the vsp id
189 * @param version the version
190 * @return the vsp components
192 public Map<String, String> getVspComponents(String vspId, Version version) {
193 Map<String, String> componentIdNameMap = new HashMap<>();
194 Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
195 deploymentFlavorDao.list(new DeploymentFlavorEntity(vspId, version, null));
196 for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
197 DeploymentFlavor deploymentFlavorCompositionData =
198 deploymentFlavorEntity.getDeploymentFlavorCompositionData();
200 List<ComponentComputeAssociation> componentComputeAssociations =
201 deploymentFlavorCompositionData.getComponentComputeAssociations();
202 if (CollectionUtils.isNotEmpty(componentComputeAssociations)) {
203 for (ComponentComputeAssociation componentComputeAssociation :
204 componentComputeAssociations) {
205 String componentId = componentComputeAssociation.getComponentId();
206 Optional<String> componentName = getComponentName(vspId, version, componentId);
207 componentName.ifPresent(name -> componentIdNameMap.put(componentId, name));
211 return componentIdNameMap;
215 * Gets the NIC data for manually onboarded VSPs.
217 * @param vspId the vsp id
218 * @param version the version
219 * @return the vsp component nics
221 public Map<String, List<Nic>> getVspComponentNics(String vspId, Version version) {
222 Map<String, List<Nic>> vspComponentNics = new HashMap<>();
223 Collection<DeploymentFlavorEntity> deploymentFlavorEntities =
224 deploymentFlavorDao.list(new DeploymentFlavorEntity(vspId, version, null));
225 if (CollectionUtils.isNotEmpty(deploymentFlavorEntities)) {
226 for (DeploymentFlavorEntity deploymentFlavorEntity : deploymentFlavorEntities) {
227 DeploymentFlavor deploymentFlavorCompositionData =
228 deploymentFlavorEntity.getDeploymentFlavorCompositionData();
229 if (Objects.nonNull(deploymentFlavorCompositionData)) {
230 List<ComponentComputeAssociation> componentComputeAssociations =
231 deploymentFlavorCompositionData.getComponentComputeAssociations();
232 if (CollectionUtils.isNotEmpty(componentComputeAssociations)) {
233 for (ComponentComputeAssociation componentComputeAssociation :
234 componentComputeAssociations) {
235 String componentId = componentComputeAssociation.getComponentId();
236 List<Nic> componentNics = getComponentNics(vspId, version, componentId);
237 if (CollectionUtils.isNotEmpty(componentNics)) {
238 vspComponentNics.put(componentId, componentNics);
245 return vspComponentNics;
248 private List<Nic> getComponentNics(String vspId, Version version, String componentId) {
249 List<Nic> componentNics = new ArrayList<>();
250 Collection<NicEntity> nics = nicDao.list(new NicEntity(vspId, version, componentId, null));
251 if (Objects.nonNull(nics)) {
252 for (NicEntity nic : nics) {
253 String nicId = nic.getId();
254 NicEntity nicEntity = nicDao.get(new NicEntity(vspId, version, componentId, nicId));
255 if (Objects.nonNull(nicEntity)
256 && Objects.nonNull(nicEntity.getCompositionData())) {
257 componentNics.add(nicEntity.getNicCompositionData());
261 return componentNics;
264 private LicenseFlavor getLicenseFlavor(String featureGroupId) {
265 LicenseFlavor licenseFlavor = new LicenseFlavor();
266 licenseFlavor.setFeature_group_uuid(featureGroupId);
267 return licenseFlavor;
270 private Optional<String> getPartNumber(String vlmId, Version version,
271 String featureGroupId) {
272 FeatureGroupModel featureGroup = getFeatureGroup(vlmId, version, featureGroupId);
273 if (Objects.nonNull(featureGroup)) {
274 return Optional.ofNullable(featureGroup.getFeatureGroup().getPartNumber());
276 return Optional.empty();
279 private Optional<VendorInfo> getVendorInfo(String vlmId, String vendorModel, Version version,
280 String featureGroupId) {
281 VendorInfo vendorInfo = null;
282 FeatureGroupModel featureGroup = getFeatureGroup(vlmId, version, featureGroupId);
283 if (Objects.nonNull(featureGroup)) {
284 //Process Feature group to get Manufacturer ref no.
285 String manufacturerReferenceNumber = featureGroup.getEntityManufacturerReferenceNumber();
286 vendorInfo = new VendorInfo();
287 vendorInfo.setVendor_model(vendorModel);
288 if (Objects.nonNull(manufacturerReferenceNumber)) {
289 vendorInfo.setManufacturer_reference_number(manufacturerReferenceNumber);
292 return Optional.ofNullable(vendorInfo);
295 private Optional<ComputeFlavor> getComputeFlavor(String vspId, Version version,
296 String componentId, String computeFlavorId) {
297 ComputeFlavor computeFlavor = null;
298 ComputeEntity computeQuestionnaire;
300 computeQuestionnaire = computeDao.getQuestionnaireData(vspId, version, componentId,
302 } catch (Exception ex) {
304 computeQuestionnaire = null;
306 if (Objects.nonNull(computeQuestionnaire)) {
307 String computeQuestionnaireData = computeQuestionnaire.getQuestionnaireData();
308 if (Objects.nonNull(computeQuestionnaireData)) {
311 compute = JsonUtil.json2Object(computeQuestionnaireData, Compute.class);
312 } catch (Exception ex) {
316 if (compute != null && Objects.nonNull(compute.getVmSizing())) {
317 computeFlavor = new ComputeFlavor();
318 if (Objects.nonNull(compute.getVmSizing().getNumOfCPUs())) {
319 computeFlavor.setNum_cpus(compute.getVmSizing().getNumOfCPUs());
321 if (Objects.nonNull(compute.getVmSizing().getFileSystemSizeGB())) {
322 computeFlavor.setDisk_size(compute.getVmSizing().getFileSystemSizeGB() + " GB");
324 if (Objects.nonNull(compute.getVmSizing().getMemoryRAM())) {
325 computeFlavor.setMem_size(compute.getVmSizing().getMemoryRAM());
330 return Optional.ofNullable(computeFlavor);
333 private FeatureGroupModel getFeatureGroup(String vlmId, Version version, String featureGroupId) {
334 FeatureGroupEntity fgInput = new FeatureGroupEntity();
335 fgInput.setVendorLicenseModelId(vlmId);
336 fgInput.setVersion(version);
337 fgInput.setId(featureGroupId);
338 return vendorLicenseFacade.getFeatureGroupModel(fgInput);
341 private Optional<String> getComponentName(String vspId, Version version, String componentId) {
343 ComponentEntity componentEntity =
344 componentDao.get(new ComponentEntity(vspId, version, componentId));
345 if (Objects.nonNull(componentEntity)
346 && Objects.nonNull(componentEntity.getComponentCompositionData())) {
347 ComponentData componentCompositionData = componentEntity.getComponentCompositionData();
348 return Optional.ofNullable(componentCompositionData.getDisplayName());
350 return Optional.empty();
353 private List<MultiFlavorVfcImage> getComponentImages(String vspId, Version version,
354 String componentId) {
355 List<MultiFlavorVfcImage> multiFlavorVfcImages = new ArrayList<>();
356 MultiFlavorVfcImage multiFlavorVfcImage;
357 Collection<ImageEntity> componentImages =
358 imageDao.list(new ImageEntity(vspId, version, componentId, null));
359 if (Objects.nonNull(componentImages)) {
360 for (ImageEntity componentImage : componentImages) {
361 ImageEntity imageEntity = imageDao.get(componentImage);
362 ImageEntity imageQuestionnaireDataEntity = imageDao.getQuestionnaireData(vspId, version,
363 componentId, componentImage.getId());
364 Image imageCompositionData = imageEntity.getImageCompositionData();
365 if (Objects.nonNull(imageEntity)
366 && Objects.nonNull(imageQuestionnaireDataEntity)
367 && Objects.nonNull(imageCompositionData)) {
368 ImageDetails imageDetails;
370 imageDetails = JsonUtil.json2Object(imageQuestionnaireDataEntity
371 .getQuestionnaireData(), ImageDetails.class);
372 } catch (Exception ex) {
376 if (Objects.nonNull(imageDetails)
377 && Objects.nonNull(imageDetails.getVersion())) {
378 //Image version is used as a key for the image block
379 //So excluding the population if questionnaire data is absent or invalid
380 multiFlavorVfcImage = new MultiFlavorVfcImage();
381 multiFlavorVfcImage.setSoftware_version(imageDetails.getVersion());
382 if (Objects.nonNull(imageCompositionData.getFileName())) {
383 multiFlavorVfcImage.setFile_name(imageCompositionData.getFileName());
385 if (Objects.nonNull(imageDetails.getMd5())) {
386 multiFlavorVfcImage.setFile_hash(imageDetails.getMd5());
388 multiFlavorVfcImage.setFile_hash_type("md5");
389 multiFlavorVfcImages.add(multiFlavorVfcImage);
394 return multiFlavorVfcImages;