From 1d9d7b5f03b3e7b6af5600574a0ae6053843b77b Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Tue, 28 Oct 2014 13:07:05 +0000
Subject: [PATCH] #2021 feature - Fixing pack cacnellation and deletion actions

---
 securis/src/main/java/net/curisit/securis/services/PackResource.java |   35 +++++++++++++++++++++++++++--------
 1 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/services/PackResource.java b/securis/src/main/java/net/curisit/securis/services/PackResource.java
index a3b65a9..cd18426 100644
--- a/securis/src/main/java/net/curisit/securis/services/PackResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/PackResource.java
@@ -12,6 +12,7 @@
 import javax.persistence.TypedQuery;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
+import javax.ws.rs.FormParam;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
@@ -26,6 +27,8 @@
 import net.curisit.integrity.commons.Utils;
 import net.curisit.securis.DefaultExceptionHandler;
 import net.curisit.securis.SeCurisException;
+import net.curisit.securis.db.License;
+import net.curisit.securis.db.LicenseStatus;
 import net.curisit.securis.db.LicenseType;
 import net.curisit.securis.db.Organization;
 import net.curisit.securis.db.Pack;
@@ -36,6 +39,8 @@
 import net.curisit.securis.security.Securable;
 import net.curisit.securis.services.exception.SeCurisServiceException;
 import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;
+import net.curisit.securis.services.helpers.LicenseHelper;
+import net.curisit.securis.services.helpers.UserHelper;
 import net.curisit.securis.utils.TokenHelper;
 
 import org.apache.logging.log4j.LogManager;
@@ -60,8 +65,11 @@
     @Inject
     Provider<EntityManager> emProvider;
 
-    public PackResource() {
-    }
+    @Inject
+    private UserHelper userHelper;
+
+    @Inject
+    private LicenseHelper licenseHelper;
 
     /**
      * 
@@ -297,8 +305,9 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    public Response cancel(@PathParam("packId") Integer packId) throws SeCurisServiceException {
-        LOG.info("Putting On hold pack with id: {}", packId);
+    public Response cancel(@PathParam("packId") Integer packId, @FormParam("reason") String reason, @Context BasicSecurityContext bsc)
+            throws SeCurisServiceException {
+        LOG.info("Cancelling pack with id: {}", packId);
         EntityManager em = emProvider.get();
 
         Pack currentPack = em.find(Pack.class, packId);
@@ -308,6 +317,12 @@
             throw new SeCurisServiceException(ErrorCodes.WRONG_STATUS, "Pack cannot be cancelled in status: " + currentPack.getStatus().name());
         }
 
+        Set<License> licenses = currentPack.getLicenses();
+        for (License license : licenses) {
+            if (license.getStatus() == LicenseStatus.ACTIVE || license.getStatus() == LicenseStatus.PRE_ACTIVE) {
+                licenseHelper.cancelLicense(license, "Pack cancellation. " + reason, bsc, em);
+            }
+        }
         currentPack.setStatus(PackStatus.CANCELLED);
         em.persist(currentPack);
 
@@ -334,7 +349,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    public Response delete(@PathParam("packId") String packId) {
+    public Response delete(@PathParam("packId") String packId) throws SeCurisServiceException {
         LOG.info("Deleting pack with id: {}", packId);
         EntityManager em = emProvider.get();
         Pack pack = em.find(Pack.class, Integer.parseInt(packId));
@@ -343,10 +358,14 @@
             return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Pack was not found, ID: " + packId)
                     .build();
         }
-        if (pack.getMetadata() != null) {
-            for (PackMetadata md : pack.getMetadata()) {
-                em.remove(md);
+        // Pack metadata is removed in cascade automatically.
+
+        Set<License> licenses = pack.getLicenses();
+        for (License license : licenses) {
+            if (license.getStatus() == LicenseStatus.ACTIVE || license.getStatus() == LicenseStatus.PRE_ACTIVE) {
+                throw new SeCurisServiceException(ErrorCodes.WRONG_STATUS, "An active license cannot be deleted. License code: " + license.getCode());
             }
+            em.remove(license);
         }
 
         em.remove(pack);

--
Gitblit v1.3.2