Add collaboration feature
[sdc.git] / openecomp-be / lib / openecomp-healing-lib / openecomp-sdc-healing-impl / src / main / java / org / openecomp / sdc / healing / healers / VlmVersionHealer.java
1 package org.openecomp.sdc.healing.healers;
2
3 import org.openecomp.sdc.healing.interfaces.Healer;
4 import org.openecomp.sdc.logging.api.Logger;
5 import org.openecomp.sdc.logging.api.LoggerFactory;
6 import org.openecomp.sdc.vendorlicense.dao.LicenseAgreementDao;
7 import org.openecomp.sdc.vendorlicense.dao.LicenseAgreementDaoFactory;
8 import org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity;
9 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
10 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDaoFactory;
11 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
12 import org.openecomp.sdc.versioning.VersioningManager;
13 import org.openecomp.sdc.versioning.VersioningManagerFactory;
14 import org.openecomp.sdc.versioning.dao.types.Version;
15 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
16
17 import java.util.ArrayList;
18 import java.util.Collection;
19 import java.util.Objects;
20 import java.util.Optional;
21
22 /**
23  * Created by TALIO on 7/3/2017.
24  */
25 public class VlmVersionHealer implements Healer {
26   private VersioningManager versioningManager =
27       VersioningManagerFactory.getInstance().createInterface();
28   private static final VendorSoftwareProductInfoDao vspInfoDao =
29       VendorSoftwareProductInfoDaoFactory.getInstance().createInterface();
30   private static final LicenseAgreementDao licenseAgreementDao =
31       LicenseAgreementDaoFactory.getInstance().createInterface();
32   private static final Logger logger =
33       LoggerFactory.getLogger(VlmVersionHealer.class);
34
35   @Override
36   public Object heal(String vspId, Version version) throws Exception {
37     VspDetails vspDetails = vspInfoDao.get(new VspDetails(vspId, version));
38
39     if (!Objects.isNull(vspDetails.getVlmVersion())) {
40       return Optional.empty();
41     }
42
43     // get the certified vlm version with the highest number in its name
44     Optional<Version> certifiedVlmVersion =
45         versioningManager.list(vspDetails.getVendorId()).stream()
46             .filter(ver -> VersionStatus.Certified == ver.getStatus())
47             .max((o1, o2) -> ((Double) Double.parseDouble(o1.getName()))
48                 .compareTo(Double.parseDouble(o2.getName())));
49     if (!certifiedVlmVersion.isPresent()) {
50       logger.debug("No Vlm was found for Vsp " + vspDetails.getName());
51       return Optional.empty();
52     }
53     vspDetails.setVlmVersion(certifiedVlmVersion.get());
54
55     Collection<LicenseAgreementEntity> licenseAgreements = licenseAgreementDao.list(
56         new LicenseAgreementEntity(vspDetails.getVendorId(), certifiedVlmVersion.get(), null));
57     if (!licenseAgreements.isEmpty()) {
58       LicenseAgreementEntity licenseAgreement = licenseAgreements.iterator().next();
59       vspDetails.setLicenseAgreement(licenseAgreement.getId());
60       vspDetails.setFeatureGroups(new ArrayList<>(licenseAgreement.getFeatureGroupIds()));
61     }
62
63     vspInfoDao.update(vspDetails);
64
65     return vspDetails;
66   }
67 }