From c4d513ca26fe80946a5d90264de5d8e13e4ea974 Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Thu, 23 Oct 2014 17:21:24 +0000
Subject: [PATCH] #2021 feature - Added pack actions in server and in frontend

---
 securis/src/main/java/net/curisit/securis/db/License.java |   64 ++++++++++++++++++++------------
 1 files changed, 40 insertions(+), 24 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 e8ce296..037ccf5 100644
--- a/securis/src/main/java/net/curisit/securis/db/License.java
+++ b/securis/src/main/java/net/curisit/securis/db/License.java
@@ -16,11 +16,17 @@
 import javax.persistence.ManyToOne;
 import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
+import javax.persistence.NonUniqueResultException;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
 import javax.persistence.TypedQuery;
 
 import net.curisit.integrity.commons.Utils;
+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;
 
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -39,11 +45,13 @@
 @JsonIgnoreProperties(ignoreUnknown = true)
 @NamedQueries({
         @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')")
 })
 public class License implements Serializable {
+    private static final long serialVersionUID = 2700310404904877227L;
 
-    private static final long serialVersionUID = 1L;
+    private static final Logger LOG = LogManager.getLogger(License.class);
 
     @Id
     @GeneratedValue
@@ -63,8 +71,8 @@
 
     @JsonIgnore
     @ManyToOne
-    @JoinColumn(name = "canceled_by")
-    private User canceledBy;
+    @JoinColumn(name = "cancelled_by")
+    private User cancelledBy;
 
     private LicenseStatus status;
 
@@ -78,6 +86,10 @@
     @JsonProperty("request_data")
     private String requestData;
 
+    /**
+     * request data hash is automatically set when we use
+     * {@link License#setRequestData(String)} method
+     */
     @Column(name = "request_data_hash")
     @JsonIgnore
     private String reqDataHash;
@@ -158,18 +170,18 @@
         }
     }
 
-    @JsonProperty("canceled_by_id")
-    public String getCanceledById() {
-        return canceledBy == null ? null : canceledBy.getUsername();
+    @JsonProperty("cancelled_by_id")
+    public String getCancelledById() {
+        return cancelledBy == null ? null : cancelledBy.getUsername();
     }
 
-    @JsonProperty("canceled_by_id")
-    public void setCanceledById(String username) {
+    @JsonProperty("cancelled_by_id")
+    public void setCancelledById(String username) {
         if (username == null) {
-            canceledBy = null;
+            cancelledBy = null;
         } else {
-            canceledBy = new User();
-            canceledBy.setUsername(username);
+            cancelledBy = new User();
+            cancelledBy.setUsername(username);
         }
     }
 
@@ -229,12 +241,12 @@
         this.id = id;
     }
 
-    public User getCanceledBy() {
-        return canceledBy;
+    public User getCancelledBy() {
+        return cancelledBy;
     }
 
-    public void setCanceledBy(User canceledBy) {
-        this.canceledBy = canceledBy;
+    public void setCancelledBy(User cancelledBy) {
+        this.cancelledBy = cancelledBy;
     }
 
     public Date getLastAccessTimestamp() {
@@ -251,6 +263,7 @@
 
     public void setRequestData(String requestData) {
         this.requestData = requestData;
+        this.reqDataHash = BlockedRequest.generateHash(this.requestData);
     }
 
     public String getLicenseData() {
@@ -283,6 +296,10 @@
 
     public void setExpirationDate(Date expirationDate) {
         this.expirationDate = expirationDate;
+    }
+
+    public String getReqDataHash() {
+        return reqDataHash;
     }
 
     public static class Action {
@@ -323,17 +340,16 @@
         }
     }
 
-    public License findLicenseByRequestData(String requestData, EntityManager em) {
+    public static License findLicenseByRequestData(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));
-        return null;
+        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));
+        }
     }
 
-    public String getReqDataHash() {
-        return reqDataHash;
-    }
-
-    public void setReqDataHash(String reqDataHash) {
-        this.reqDataHash = reqDataHash;
-    }
 }

--
Gitblit v1.3.2