| .. | .. |
|---|
| 16 | 16 | |
|---|
| 17 | 17 | import net.curisit.securis.db.Application; |
|---|
| 18 | 18 | import net.curisit.securis.db.ApplicationMetadata; |
|---|
| 19 | +import net.curisit.securis.db.License; |
|---|
| 20 | +import net.curisit.securis.db.LicenseStatus; |
|---|
| 19 | 21 | import net.curisit.securis.db.LicenseType; |
|---|
| 20 | 22 | import net.curisit.securis.db.LicenseTypeMetadata; |
|---|
| 21 | 23 | import net.curisit.securis.db.Pack; |
|---|
| .. | .. |
|---|
| 108 | 110 | public void propagateMetadata(EntityManager em, Application app) { |
|---|
| 109 | 111 | Set<ApplicationMetadata> appMd = app.getApplicationMetadata(); |
|---|
| 110 | 112 | Set<String> keys = appMd.parallelStream().map(md -> md.getKey()).collect(Collectors.toSet()); |
|---|
| 111 | | - log.info("App metadata keys: {}", keys); |
|---|
| 112 | 113 | for (LicenseType lt : app.getLicenseTypes()) { |
|---|
| 113 | 114 | log.info("Lic type to update: {}", lt.getCode()); |
|---|
| 114 | 115 | this.mergeMetadata(em, appMd, lt.getMetadata(), keys); |
|---|
| 115 | 116 | Set<LicenseTypeMetadata> newMdList = createNewMetadata(appMd, lt.getMetadata(), lt); |
|---|
| 116 | 117 | for (LicenseTypeMetadata newMetadata : newMdList) { |
|---|
| 117 | | - log.info("MD key to add to lt: {}", newMetadata.getKey()); |
|---|
| 118 | 118 | em.persist(newMetadata); |
|---|
| 119 | 119 | } |
|---|
| 120 | 120 | em.detach(lt); |
|---|
| .. | .. |
|---|
| 142 | 142 | List<Pack> packs = packsQuery.getResultList(); |
|---|
| 143 | 143 | log.info("Packs to update the metadata: {}", packs.size()); |
|---|
| 144 | 144 | for (Pack pack : packs) { |
|---|
| 145 | + if (pack.isFrozen()) { |
|---|
| 146 | + log.warn("Metadata in LicenseType {} has changed but the Pack {} is frozen and won't be updated.", lt.getCode(), pack.getCode()); |
|---|
| 147 | + continue; |
|---|
| 148 | + } |
|---|
| 145 | 149 | this.mergeMetadata(em, ltMd, pack.getMetadata(), keys); |
|---|
| 146 | 150 | Set<PackMetadata> newMdList = createNewMetadata(ltMd, pack.getMetadata(), pack); |
|---|
| 147 | 151 | for (PackMetadata newMetadata : newMdList) { |
|---|
| 148 | | - log.info("MD key to add to pack: {}", newMetadata.getKey()); |
|---|
| 149 | 152 | em.persist(newMetadata); |
|---|
| 150 | 153 | } |
|---|
| 154 | + markObsoleteMetadata(em, pack); |
|---|
| 151 | 155 | em.detach(pack); |
|---|
| 152 | 156 | } |
|---|
| 153 | 157 | } |
|---|
| 154 | 158 | |
|---|
| 159 | + public void markObsoleteMetadata(EntityManager em, Pack pack) { |
|---|
| 160 | + TypedQuery<License> existingPackLicenses = em.createNamedQuery("list-licenses-by-pack", License.class); |
|---|
| 161 | + existingPackLicenses.setParameter("packId", pack.getId()); |
|---|
| 162 | + for (License lic : existingPackLicenses.getResultList()) { |
|---|
| 163 | + log.info("License from pack: {}, status: {}", lic.getCode(), lic.getStatus()); |
|---|
| 164 | + if (lic.getStatus() == LicenseStatus.ACTIVE || lic.getStatus() == LicenseStatus.PRE_ACTIVE || lic.getStatus() == LicenseStatus.CANCELLED) { |
|---|
| 165 | + lic.setMetadataObsolete(true); |
|---|
| 166 | + em.merge(lic); |
|---|
| 167 | + } |
|---|
| 168 | + } |
|---|
| 169 | + } |
|---|
| 155 | 170 | } |
|---|