From 8200793f22c0ec9fc1ab9026406fe4d3a8cbaab7 Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Wed, 17 Dec 2014 12:30:46 +0000
Subject: [PATCH] #2205 feature - Added support for name or reference and email in license requests

---
 securis/src/main/java/net/curisit/securis/db/License.java |   50 +++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 41 insertions(+), 9 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/db/License.java b/securis/src/main/java/net/curisit/securis/db/License.java
index 5d8784c..6c0ec5b 100644
--- a/securis/src/main/java/net/curisit/securis/db/License.java
+++ b/securis/src/main/java/net/curisit/securis/db/License.java
@@ -18,7 +18,6 @@
 import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
 import javax.persistence.NoResultException;
-import javax.persistence.NonUniqueResultException;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
 import javax.persistence.TypedQuery;
@@ -29,7 +28,6 @@
 import net.curisit.securis.db.listeners.CreationTimestampListener;
 import net.curisit.securis.db.listeners.ModificationTimestampListener;
 import net.curisit.securis.services.exception.SeCurisServiceException;
-import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -59,7 +57,9 @@
         @NamedQuery(name = "last-code-suffix-used-in-pack", query = "SELECT max(l.codeSuffix) FROM License l where l.pack.id = :packId"),
         @NamedQuery(name = "list-licenses-by-pack", query = "SELECT l FROM License l where l.pack.id = :packId"),
         @NamedQuery(name = "list-licenses-by-req-data", query = "SELECT l FROM License l where l.reqDataHash = :hash"),
-        @NamedQuery(name = "list-active-licenses-by-req-data", query = "SELECT l FROM License l where l.reqDataHash = :hash and l.status in ('AC', 'PA')")
+        @NamedQuery(name = "list-active-licenses-by-req-data", query = "SELECT l FROM License l where l.reqDataHash = :hash and l.status in ('AC', 'PA')"),
+        @NamedQuery(name = "list-valid-licenses-by-req-data", query = "SELECT l FROM License l where l.reqDataHash = :hash and l.status in ('RE', 'AC', 'PA')")
+
 })
 public class License implements CreationTimestampEntity, ModificationTimestampEntity, Serializable {
 
@@ -369,15 +369,47 @@
         }
     }
 
-    public static License findLicenseByRequestData(String requestData, EntityManager em) throws SeCurisServiceException {
+    /**
+     * Return licenses with status: REquested, ACtive, Pre-Active for a given
+     * request data
+     * 
+     * @param requestData
+     * @param em
+     * @return
+     * @throws SeCurisServiceException
+     */
+    public static License findValidLicenseByRequestData(String requestData, EntityManager em) throws SeCurisServiceException {
+        TypedQuery<License> query = em.createNamedQuery("list-valid-licenses-by-req-data", License.class);
+        query.setParameter("hash", BlockedRequest.generateHash(requestData));
+        try {
+            List<License> list = query.getResultList();
+            if (list.size() == 0) {
+                return null;
+            }
+            if (list.size() > 1) {
+                LOG.error("There are more than 1 active or requested license for request data: {}\nHash: {}", requestData,
+                        BlockedRequest.generateHash(requestData));
+            }
+            return list.get(0);
+        } catch (NoResultException e) {
+            // There is no license for request data
+            return null;
+        }
+    }
+
+    public static License findActiveLicenseByRequestData(String requestData, EntityManager em) throws SeCurisServiceException {
         TypedQuery<License> query = em.createNamedQuery("list-active-licenses-by-req-data", License.class);
         query.setParameter("hash", BlockedRequest.generateHash(requestData));
         try {
-            return query.getSingleResult();
-        } catch (NonUniqueResultException e) {
-            LOG.error("There are more than 1 active license for request data: {}\nHash: {}", requestData, BlockedRequest.generateHash(requestData));
-            throw new SeCurisServiceException(ErrorCodes.DUPLICATED_REQUEST_DATA, "There are more than 1 active license for request data hash: "
-                    + BlockedRequest.generateHash(requestData));
+            List<License> list = query.getResultList();
+            if (list.size() == 0) {
+                return null;
+            }
+            if (list.size() > 1) {
+                LOG.error("There are more than 1 active license for request data: {}\nHash: {}", requestData,
+                        BlockedRequest.generateHash(requestData));
+            }
+            return list.get(0);
         } catch (NoResultException e) {
             // There is no license for request data
             return null;

--
Gitblit v1.3.2