From 347803bd8d8349baa0577156896a1ec924a69e6d Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Mon, 03 Apr 2017 16:41:28 +0000
Subject: [PATCH] #3535 fix - Marked obsolete metadata field on licenses

---
 securis/src/main/java/net/curisit/securis/services/helpers/MetadataHelper.java |   21 ++++++++++++++++++---
 1 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/services/helpers/MetadataHelper.java b/securis/src/main/java/net/curisit/securis/services/helpers/MetadataHelper.java
index 6934095..ce6fb45 100644
--- a/securis/src/main/java/net/curisit/securis/services/helpers/MetadataHelper.java
+++ b/securis/src/main/java/net/curisit/securis/services/helpers/MetadataHelper.java
@@ -16,6 +16,8 @@
 
 import net.curisit.securis.db.Application;
 import net.curisit.securis.db.ApplicationMetadata;
+import net.curisit.securis.db.License;
+import net.curisit.securis.db.LicenseStatus;
 import net.curisit.securis.db.LicenseType;
 import net.curisit.securis.db.LicenseTypeMetadata;
 import net.curisit.securis.db.Pack;
@@ -108,13 +110,11 @@
 	public void propagateMetadata(EntityManager em, Application app) {
 		Set<ApplicationMetadata> appMd = app.getApplicationMetadata();
 		Set<String> keys = appMd.parallelStream().map(md -> md.getKey()).collect(Collectors.toSet());
-		log.info("App metadata keys: {}", keys);
 		for (LicenseType lt : app.getLicenseTypes()) {
 			log.info("Lic type to update: {}", lt.getCode());
 			this.mergeMetadata(em, appMd, lt.getMetadata(), keys);
 			Set<LicenseTypeMetadata> newMdList = createNewMetadata(appMd, lt.getMetadata(), lt);
 			for (LicenseTypeMetadata newMetadata : newMdList) {
-				log.info("MD key to add to lt: {}", newMetadata.getKey());
 				em.persist(newMetadata);
 			}
 			em.detach(lt);
@@ -142,14 +142,29 @@
 		List<Pack> packs = packsQuery.getResultList();
 		log.info("Packs to update the metadata: {}", packs.size());
 		for (Pack pack : packs) {
+			if (pack.isFrozen()) {
+				log.warn("Metadata in LicenseType {} has changed but the Pack {} is frozen and won't be updated.", lt.getCode(), pack.getCode());
+				continue;
+			}
 			this.mergeMetadata(em, ltMd, pack.getMetadata(), keys);
 			Set<PackMetadata> newMdList = createNewMetadata(ltMd, pack.getMetadata(), pack);
 			for (PackMetadata newMetadata : newMdList) {
-				log.info("MD key to add to pack: {}", newMetadata.getKey());
 				em.persist(newMetadata);
 			}
+			markObsoleteMetadata(em, pack);
 			em.detach(pack);
 		}
 	}
 
+	public void markObsoleteMetadata(EntityManager em, Pack pack) {
+		TypedQuery<License> existingPackLicenses = em.createNamedQuery("list-licenses-by-pack", License.class);
+		existingPackLicenses.setParameter("packId", pack.getId());
+		for (License lic : existingPackLicenses.getResultList()) {
+			log.info("License from pack: {}, status: {}", lic.getCode(), lic.getStatus());
+			if (lic.getStatus() == LicenseStatus.ACTIVE || lic.getStatus() == LicenseStatus.PRE_ACTIVE || lic.getStatus() == LicenseStatus.CANCELLED) {
+				lic.setMetadataObsolete(true);
+				em.merge(lic);
+			}
+		}
+	}
 }

--
Gitblit v1.3.2