rsanchez
2014-12-17 8200793f22c0ec9fc1ab9026406fe4d3a8cbaab7
securis/src/main/java/net/curisit/securis/db/License.java
....@@ -18,7 +18,6 @@
1818 import javax.persistence.NamedQueries;
1919 import javax.persistence.NamedQuery;
2020 import javax.persistence.NoResultException;
21
-import javax.persistence.NonUniqueResultException;
2221 import javax.persistence.OneToMany;
2322 import javax.persistence.Table;
2423 import javax.persistence.TypedQuery;
....@@ -29,7 +28,6 @@
2928 import net.curisit.securis.db.listeners.CreationTimestampListener;
3029 import net.curisit.securis.db.listeners.ModificationTimestampListener;
3130 import net.curisit.securis.services.exception.SeCurisServiceException;
32
-import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;
3331
3432 import org.apache.logging.log4j.LogManager;
3533 import org.apache.logging.log4j.Logger;
....@@ -59,7 +57,9 @@
5957 @NamedQuery(name = "last-code-suffix-used-in-pack", query = "SELECT max(l.codeSuffix) FROM License l where l.pack.id = :packId"),
6058 @NamedQuery(name = "list-licenses-by-pack", query = "SELECT l FROM License l where l.pack.id = :packId"),
6159 @NamedQuery(name = "list-licenses-by-req-data", query = "SELECT l FROM License l where l.reqDataHash = :hash"),
62
- @NamedQuery(name = "list-active-licenses-by-req-data", query = "SELECT l FROM License l where l.reqDataHash = :hash and l.status in ('AC', 'PA')")
60
+ @NamedQuery(name = "list-active-licenses-by-req-data", query = "SELECT l FROM License l where l.reqDataHash = :hash and l.status in ('AC', 'PA')"),
61
+ @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')")
62
+
6363 })
6464 public class License implements CreationTimestampEntity, ModificationTimestampEntity, Serializable {
6565
....@@ -369,15 +369,47 @@
369369 }
370370 }
371371
372
- public static License findLicenseByRequestData(String requestData, EntityManager em) throws SeCurisServiceException {
372
+ /**
373
+ * Return licenses with status: REquested, ACtive, Pre-Active for a given
374
+ * request data
375
+ *
376
+ * @param requestData
377
+ * @param em
378
+ * @return
379
+ * @throws SeCurisServiceException
380
+ */
381
+ public static License findValidLicenseByRequestData(String requestData, EntityManager em) throws SeCurisServiceException {
382
+ TypedQuery<License> query = em.createNamedQuery("list-valid-licenses-by-req-data", License.class);
383
+ query.setParameter("hash", BlockedRequest.generateHash(requestData));
384
+ try {
385
+ List<License> list = query.getResultList();
386
+ if (list.size() == 0) {
387
+ return null;
388
+ }
389
+ if (list.size() > 1) {
390
+ LOG.error("There are more than 1 active or requested license for request data: {}\nHash: {}", requestData,
391
+ BlockedRequest.generateHash(requestData));
392
+ }
393
+ return list.get(0);
394
+ } catch (NoResultException e) {
395
+ // There is no license for request data
396
+ return null;
397
+ }
398
+ }
399
+
400
+ public static License findActiveLicenseByRequestData(String requestData, EntityManager em) throws SeCurisServiceException {
373401 TypedQuery<License> query = em.createNamedQuery("list-active-licenses-by-req-data", License.class);
374402 query.setParameter("hash", BlockedRequest.generateHash(requestData));
375403 try {
376
- return query.getSingleResult();
377
- } catch (NonUniqueResultException e) {
378
- LOG.error("There are more than 1 active license for request data: {}\nHash: {}", requestData, BlockedRequest.generateHash(requestData));
379
- throw new SeCurisServiceException(ErrorCodes.DUPLICATED_REQUEST_DATA, "There are more than 1 active license for request data hash: "
380
- + BlockedRequest.generateHash(requestData));
404
+ List<License> list = query.getResultList();
405
+ if (list.size() == 0) {
406
+ return null;
407
+ }
408
+ if (list.size() > 1) {
409
+ LOG.error("There are more than 1 active license for request data: {}\nHash: {}", requestData,
410
+ BlockedRequest.generateHash(requestData));
411
+ }
412
+ return list.get(0);
381413 } catch (NoResultException e) {
382414 // There is no license for request data
383415 return null;