From 7071103bbb2d339aa5754e081de4c1137c67b271 Mon Sep 17 00:00:00 2001 From: vrinda Date: Tue, 19 Mar 2019 13:07:59 +0100 Subject: [PATCH] Replace QueryDSL by JPA Criteria API #1806 --- .../arc/diff/impl/DiffServiceEJB.java | 49 +++++++++-------- .../org/dcm4chee/arc/entity/RetrieveTask.java | 2 +- .../arc/entity/StorageVerificationTask.java | 2 +- .../arc/export/mgt/impl/ExportManagerEJB.java | 44 ++++++++------- .../dcm4chee/arc/query/util/MatchTask.java | 53 +++++++------------ .../retrieve/mgt/impl/RetrieveManagerEJB.java | 48 ++++++++--------- .../dcm4chee/arc/stgcmt/impl/StgCmtEJB.java | 44 ++++++++------- 7 files changed, 113 insertions(+), 129 deletions(-) diff --git a/dcm4chee-arc-diff/src/main/java/org/dcm4chee/arc/diff/impl/DiffServiceEJB.java b/dcm4chee-arc-diff/src/main/java/org/dcm4chee/arc/diff/impl/DiffServiceEJB.java index 6839929bc9..154658023e 100644 --- a/dcm4chee-arc-diff/src/main/java/org/dcm4chee/arc/diff/impl/DiffServiceEJB.java +++ b/dcm4chee-arc-diff/src/main/java/org/dcm4chee/arc/diff/impl/DiffServiceEJB.java @@ -354,7 +354,7 @@ public List listDiffBatches( query.setMaxResults(limit); List diffBatches = new ArrayList<>(); - query.getResultList().forEach(batch -> { + query.getResultStream().forEach(batch -> { String batchID = batch.get(batchid); DiffBatch diffBatch = new DiffBatch(batchID); diffBatch.setProcessingStartTimeRange( @@ -402,8 +402,7 @@ public List listDiffBatches( .orderBy(cb.asc(diffTask.get(DiffTask_.secondaryAET)))) .getResultList()); diffBatch.setComparefields(em.createQuery( - batchIDQuery(batchID, String.class) - .where(diffTask.get(DiffTask_.compareFields).isNotNull()) + batchIDQuery(batchID) .select(diffTask.get(DiffTask_.compareFields)) .distinct(true)) .getResultList()); @@ -419,34 +418,22 @@ public List listDiffBatches( .getResultList()); diffBatch.setCompleted(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.COMPLETED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.COMPLETED).select(cb.count(queueMsg))) .getSingleResult()); diffBatch.setCanceled(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.CANCELED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.CANCELED).select(cb.count(queueMsg))) .getSingleResult()); diffBatch.setWarning(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.WARNING)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.WARNING).select(cb.count(queueMsg))) .getSingleResult()); diffBatch.setFailed(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.FAILED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.FAILED).select(cb.count(queueMsg))) .getSingleResult()); diffBatch.setScheduled(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.SCHEDULED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.SCHEDULED).select(cb.count(queueMsg))) .getSingleResult()); diffBatch.setInProcess(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.IN_PROCESS)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.IN_PROCESS).select(cb.count(queueMsg))) .getSingleResult()); diffBatches.add(diffBatch); @@ -486,6 +473,26 @@ private CriteriaQuery batchIDQuery(String batchID, Class clazz) { return q.where(cb.equal(queueMsg.get(QueueMessage_.batchID), batchID)); } + private CriteriaQuery batchIDQuery(String batchID, QueueMessage.Status status) { + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery q = cb.createQuery(Long.class); + diffTask = q.from(DiffTask.class); + queueMsg = diffTask.join(DiffTask_.queueMessage, JoinType.LEFT); + return q.where( + cb.equal(queueMsg.get(QueueMessage_.batchID), batchID), + cb.equal(queueMsg.get(QueueMessage_.status), status)); + } + + private CriteriaQuery batchIDQuery(String batchID) { + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery q = cb.createQuery(String.class); + diffTask = q.from(DiffTask.class); + queueMsg = diffTask.join(DiffTask_.queueMessage, JoinType.LEFT); + return q.where( + cb.equal(queueMsg.get(QueueMessage_.batchID), batchID), + diffTask.get(DiffTask_.compareFields).isNotNull()); + } + @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public Iterator listDiffTasks( TaskQueryParam queueTaskQueryParam, TaskQueryParam diffTaskQueryParam, int offset, int limit) { diff --git a/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/RetrieveTask.java b/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/RetrieveTask.java index aec7fb773d..211e86e891 100644 --- a/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/RetrieveTask.java +++ b/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/RetrieveTask.java @@ -279,7 +279,7 @@ public void setQueueMessage(QueueMessage queueMessage) { this.queueMessage = queueMessage; } - public void writeAsJSONTo(JsonGenerator gen) throws IOException { + public void writeAsJSONTo(JsonGenerator gen) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); JsonWriter writer = new JsonWriter(gen); gen.writeStartObject(); diff --git a/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/StorageVerificationTask.java b/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/StorageVerificationTask.java index 1c2b0fc7be..0974ddab43 100644 --- a/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/StorageVerificationTask.java +++ b/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/StorageVerificationTask.java @@ -247,7 +247,7 @@ public void setQueueMessage(QueueMessage queueMessage) { this.queueMessage = queueMessage; } - public void writeAsJSONTo(JsonGenerator gen) throws IOException { + public void writeAsJSONTo(JsonGenerator gen) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); JsonWriter writer = new JsonWriter(gen); gen.writeStartObject(); diff --git a/dcm4chee-arc-export-mgt/src/main/java/org/dcm4chee/arc/export/mgt/impl/ExportManagerEJB.java b/dcm4chee-arc-export-mgt/src/main/java/org/dcm4chee/arc/export/mgt/impl/ExportManagerEJB.java index 614e434da8..5e6832269e 100644 --- a/dcm4chee-arc-export-mgt/src/main/java/org/dcm4chee/arc/export/mgt/impl/ExportManagerEJB.java +++ b/dcm4chee-arc-export-mgt/src/main/java/org/dcm4chee/arc/export/mgt/impl/ExportManagerEJB.java @@ -418,7 +418,7 @@ public List listExportBatches( query.setMaxResults(limit); List exportBatches = new ArrayList<>(); - query.getResultList().forEach(batch -> { + query.getResultStream().forEach(batch -> { String batchID = batch.get(batchid); ExportBatch exportBatch = new ExportBatch(batchID); exportBatch.setProcessingStartTimeRange( @@ -438,47 +438,35 @@ public List listExportBatches( batch.get(maxUpdatedTime)); exportBatch.setDeviceNames(em.createQuery( - batchIDQuery(batchID, String.class) + batchIDQuery(batchID) .select(queueMsg.get(QueueMessage_.deviceName)) .distinct(true) .orderBy(cb.asc(queueMsg.get(QueueMessage_.deviceName)))) .getResultList()); exportBatch.setExporterIDs(em.createQuery( - batchIDQuery(batchID, String.class) + batchIDQuery(batchID) .select(exportTask.get(ExportTask_.exporterID)) .distinct(true) .orderBy(cb.asc(exportTask.get(ExportTask_.exporterID)))) .getResultList()); exportBatch.setCompleted(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.COMPLETED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.COMPLETED).select(cb.count(queueMsg))) .getSingleResult()); exportBatch.setCanceled(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.CANCELED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.CANCELED).select(cb.count(queueMsg))) .getSingleResult()); exportBatch.setWarning(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.WARNING)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.WARNING).select(cb.count(queueMsg))) .getSingleResult()); exportBatch.setFailed(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.FAILED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.FAILED).select(cb.count(queueMsg))) .getSingleResult()); exportBatch.setScheduled(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.SCHEDULED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.SCHEDULED).select(cb.count(queueMsg))) .getSingleResult()); exportBatch.setInProcess(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.IN_PROCESS)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.IN_PROCESS).select(cb.count(queueMsg))) .getSingleResult()); exportBatches.add(exportBatch); @@ -510,14 +498,24 @@ private CriteriaQuery groupBy(CriteriaQuery q) { return q.groupBy(queueMsg.get(QueueMessage_.batchID)); } - private CriteriaQuery batchIDQuery(String batchID, Class clazz) { + private CriteriaQuery batchIDQuery(String batchID) { CriteriaBuilder cb = em.getCriteriaBuilder(); - CriteriaQuery q = cb.createQuery(clazz); + CriteriaQuery q = cb.createQuery(String.class); exportTask = q.from(ExportTask.class); queueMsg = exportTask.join(ExportTask_.queueMessage, JoinType.LEFT); return q.where(cb.equal(queueMsg.get(QueueMessage_.batchID), batchID)); } + private CriteriaQuery batchIDQuery(String batchID, QueueMessage.Status status) { + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery q = cb.createQuery(Long.class); + exportTask = q.from(ExportTask.class); + queueMsg = exportTask.join(ExportTask_.queueMessage, JoinType.LEFT); + return q.where( + cb.equal(queueMsg.get(QueueMessage_.batchID), batchID), + cb.equal(queueMsg.get(QueueMessage_.status), status)); + } + @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public Iterator listExportTasks( diff --git a/dcm4chee-arc-query-util/src/main/java/org/dcm4chee/arc/query/util/MatchTask.java b/dcm4chee-arc-query-util/src/main/java/org/dcm4chee/arc/query/util/MatchTask.java index e146832d3d..8ce3e3d2cb 100644 --- a/dcm4chee-arc-query-util/src/main/java/org/dcm4chee/arc/query/util/MatchTask.java +++ b/dcm4chee-arc-query-util/src/main/java/org/dcm4chee/arc/query/util/MatchTask.java @@ -167,8 +167,7 @@ public List stgVerPredicates( return predicates; } - private void matchQueueMsg(List predicates, - TaskQueryParam taskQueryParam, From queueMsg) { + private void matchQueueMsg(List predicates, TaskQueryParam taskQueryParam, From queueMsg) { if (taskQueryParam == null || queueMsg == null) return; @@ -191,9 +190,7 @@ private void matchQueueMsg(List predicates, predicates.add(cb.lessThan(queueMsg.get(QueueMessage_.updatedTime), taskQueryParam.getUpdatedBefore())); } - private void matchExportTask( - List predicates, TaskQueryParam taskQueryParam, - Root exportTask) { + private void matchExportTask(List predicates, TaskQueryParam taskQueryParam, Root exportTask) { if (!taskQueryParam.getExporterIDs().isEmpty()) predicates.add(cb.and(exportTask.get(ExportTask_.exporterID).in(taskQueryParam.getExporterIDs()))); if (taskQueryParam.getDeviceName() != null) @@ -208,9 +205,7 @@ private void matchExportTask( cb, exportTask.get(ExportTask_.updatedTime), taskQueryParam.getUpdatedTime())); } - private void matchRetrieveTask(List predicates, - TaskQueryParam taskQueryParam, - Path retrieveTask) { + private void matchRetrieveTask(List predicates, TaskQueryParam taskQueryParam, Path retrieveTask) { if (taskQueryParam.getLocalAET() != null) predicates.add(cb.equal(retrieveTask.get(RetrieveTask_.localAET), taskQueryParam.getLocalAET())); if (taskQueryParam.getRemoteAET() != null) @@ -227,8 +222,7 @@ private void matchRetrieveTask(List predicates, cb, retrieveTask.get(RetrieveTask_.updatedTime), taskQueryParam.getUpdatedTime())); } - private void matchDiffTask( - List predicates, TaskQueryParam taskQueryParam, Path diffTask) { + private void matchDiffTask(List predicates, TaskQueryParam taskQueryParam, Path diffTask) { if (taskQueryParam.getLocalAET() != null) predicates.add(cb.equal(diffTask.get(DiffTask_.localAET), taskQueryParam.getLocalAET())); if (taskQueryParam.getPrimaryAET() != null) @@ -250,8 +244,7 @@ private void matchDiffTask( } private void matchStgVerTask( - List predicates, TaskQueryParam taskQueryParam, - Root stgVerTask) { + List predicates, TaskQueryParam taskQueryParam, Root stgVerTask) { if (taskQueryParam.getLocalAET() != null) predicates.add(cb.equal(stgVerTask.get(StorageVerificationTask_.localAET), taskQueryParam.getLocalAET())); if (taskQueryParam.getStudyIUID() != null) @@ -319,13 +312,8 @@ public Order queueMessageOrder(String orderBy, Path queueMsg) { queueMsg.get(QueueMessage_.updatedTime)); } - private Order taskOrder( - String orderby, Path createdTime, Path updatedTime) { - return order(orderby, createdTime, updatedTime); - } - - private Order order(String orderby, Path createdTime, Path updatedTime) { - switch (orderby) { + private Order taskOrder(String orderBy, Path createdTime, Path updatedTime) { + switch (orderBy) { case "createdTime": return cb.asc(createdTime); case "updatedTime": @@ -336,11 +324,10 @@ private Order order(String orderby, Path createdTime, Path updatedTi return cb.desc(updatedTime); } - throw new IllegalArgumentException(orderby); + throw new IllegalArgumentException(orderBy); } - public List matchStgCmtResult( - Root stgCmtResult, TaskQueryParam stgCmtResultQueryParam) { + public List matchStgCmtResult(Root stgCmtResult, TaskQueryParam stgCmtResultQueryParam) { List predicates = new ArrayList<>(); if (stgCmtResultQueryParam.getStgCmtStatus() != null) predicates.add(cb.equal(stgCmtResult.get(StgCmtResult_.status), stgCmtResultQueryParam.getStgCmtStatus())); @@ -377,8 +364,8 @@ public Order stgVerBatchOrder(String orderby, Path stgV stgVerTask.get(StorageVerificationTask_.updatedTime)); } - private Order batchOrder(String orderby, Path createdTime, Path updatedTime) { - switch (orderby) { + private Order batchOrder(String orderBy, Path createdTime, Path updatedTime) { + switch (orderBy) { case "createdTime": return cb.asc(cb.least(createdTime)); case "updatedTime": @@ -389,11 +376,10 @@ private Order batchOrder(String orderby, Path createdTime, Path upda return cb.desc(cb.greatest(updatedTime)); } - throw new IllegalArgumentException(orderby); + throw new IllegalArgumentException(orderBy); } - private void matchQueueBatch(List predicates, TaskQueryParam taskQueryParam, - Path queueMsg) { + private void matchQueueBatch(List predicates, TaskQueryParam taskQueryParam, Path queueMsg) { predicates.add(cb.isNotNull(queueMsg.get(QueueMessage_.batchID))); if (taskQueryParam.getStatus() != null) predicates.add(cb.equal(queueMsg.get(QueueMessage_.status), taskQueryParam.getStatus())); @@ -404,8 +390,7 @@ private void matchQueueBatch(List predicates, TaskQueryParam taskQuer } - private void matchExportBatch(List predicates, TaskQueryParam taskQueryParam, - Path exportTask) { + private void matchExportBatch(List predicates, TaskQueryParam taskQueryParam, Path exportTask) { if (!taskQueryParam.getExporterIDs().isEmpty()) predicates.add(cb.and(exportTask.get(ExportTask_.exporterID).in(taskQueryParam.getExporterIDs()))); if (taskQueryParam.getDeviceName() != null) @@ -419,8 +404,7 @@ private void matchExportBatch(List predicates, TaskQueryParam taskQue } - private void matchRetrieveBatch(List predicates, TaskQueryParam taskQueryParam, - Path retrieveTask) { + private void matchRetrieveBatch(List predicates, TaskQueryParam taskQueryParam, Path retrieveTask) { if (taskQueryParam.getLocalAET() != null) predicates.add(cb.equal(retrieveTask.get(RetrieveTask_.localAET), taskQueryParam.getLocalAET())); if (taskQueryParam.getRemoteAET() != null) @@ -436,8 +420,7 @@ private void matchRetrieveBatch(List predicates, TaskQueryParam taskQ } - private void matchDiffBatch(List predicates, TaskQueryParam taskQueryParam, - Path diffTask) { + private void matchDiffBatch(List predicates, TaskQueryParam taskQueryParam, Path diffTask) { if (taskQueryParam.getLocalAET() != null) predicates.add(cb.equal(diffTask.get(DiffTask_.localAET), taskQueryParam.getLocalAET())); if (taskQueryParam.getPrimaryAET() != null) @@ -458,8 +441,8 @@ private void matchDiffBatch(List predicates, TaskQueryParam taskQuery cb, diffTask.get(DiffTask_.updatedTime), taskQueryParam.getUpdatedTime()))); } - private void matchStgVerBatch(List predicates, TaskQueryParam taskQueryParam, - Path stgVerTask) { + private void matchStgVerBatch( + List predicates, TaskQueryParam taskQueryParam, Path stgVerTask) { if (taskQueryParam.getLocalAET() != null) predicates.add(cb.equal(stgVerTask.get(StorageVerificationTask_.localAET), taskQueryParam.getLocalAET())); if (taskQueryParam.getCreatedTime() != null) diff --git a/dcm4chee-arc-retrieve-mgt/src/main/java/org/dcm4chee/arc/retrieve/mgt/impl/RetrieveManagerEJB.java b/dcm4chee-arc-retrieve-mgt/src/main/java/org/dcm4chee/arc/retrieve/mgt/impl/RetrieveManagerEJB.java index 813c54e335..606e0b7d9b 100644 --- a/dcm4chee-arc-retrieve-mgt/src/main/java/org/dcm4chee/arc/retrieve/mgt/impl/RetrieveManagerEJB.java +++ b/dcm4chee-arc-retrieve-mgt/src/main/java/org/dcm4chee/arc/retrieve/mgt/impl/RetrieveManagerEJB.java @@ -319,7 +319,7 @@ public List listRetrieveBatches( query.setMaxResults(limit); List retrieveBatches = new ArrayList<>(); - query.getResultList().forEach(batch -> { + query.getResultStream().forEach(batch -> { String batchID = batch.get(batchid); RetrieveBatch retrieveBatch = new RetrieveBatch(batchID); retrieveBatch.setProcessingStartTimeRange( @@ -339,59 +339,47 @@ public List listRetrieveBatches( batch.get(maxUpdatedTime)); retrieveBatch.setDeviceNames(em.createQuery( - batchIDQuery(batchID, String.class) + batchIDQuery(batchID) .select(queueMsg.get(QueueMessage_.deviceName)) .distinct(true) .orderBy(cb.asc(queueMsg.get(QueueMessage_.deviceName)))) .getResultList()); retrieveBatch.setLocalAETs(em.createQuery( - batchIDQuery(batchID, String.class) + batchIDQuery(batchID) .select(retrieveTask.get(RetrieveTask_.localAET)) .distinct(true) .orderBy(cb.asc(retrieveTask.get(RetrieveTask_.localAET)))) .getResultList()); retrieveBatch.setRemoteAETs(em.createQuery( - batchIDQuery(batchID, String.class) + batchIDQuery(batchID) .select(retrieveTask.get(RetrieveTask_.remoteAET)) .distinct(true) .orderBy(cb.asc(retrieveTask.get(RetrieveTask_.remoteAET)))) .getResultList()); retrieveBatch.setDestinationAETs(em.createQuery( - batchIDQuery(batchID, String.class) + batchIDQuery(batchID) .select(retrieveTask.get(RetrieveTask_.destinationAET)) .distinct(true) .orderBy(cb.asc(retrieveTask.get(RetrieveTask_.destinationAET)))) .getResultList()); retrieveBatch.setCompleted(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.COMPLETED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.COMPLETED).select(cb.count(queueMsg))) .getSingleResult()); retrieveBatch.setCanceled(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.CANCELED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.CANCELED).select(cb.count(queueMsg))) .getSingleResult()); retrieveBatch.setWarning(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.WARNING)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.WARNING).select(cb.count(queueMsg))) .getSingleResult()); retrieveBatch.setFailed(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.FAILED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.FAILED).select(cb.count(queueMsg))) .getSingleResult()); retrieveBatch.setScheduled(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.SCHEDULED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.SCHEDULED).select(cb.count(queueMsg))) .getSingleResult()); retrieveBatch.setInProcess(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.IN_PROCESS)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.IN_PROCESS).select(cb.count(queueMsg))) .getSingleResult()); retrieveBatches.add(retrieveBatch); @@ -423,14 +411,24 @@ private CriteriaQuery groupBy(CriteriaQuery q) { return q.groupBy(queueMsg.get(QueueMessage_.batchID)); } - private CriteriaQuery batchIDQuery(String batchID, Class clazz) { + private CriteriaQuery batchIDQuery(String batchID) { CriteriaBuilder cb = em.getCriteriaBuilder(); - CriteriaQuery q = cb.createQuery(clazz); + CriteriaQuery q = cb.createQuery(String.class); retrieveTask = q.from(RetrieveTask.class); queueMsg = retrieveTask.join(RetrieveTask_.queueMessage, JoinType.LEFT); return q.where(cb.equal(queueMsg.get(QueueMessage_.batchID), batchID)); } + private CriteriaQuery batchIDQuery(String batchID, QueueMessage.Status status) { + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery q = cb.createQuery(Long.class); + retrieveTask = q.from(RetrieveTask.class); + queueMsg = retrieveTask.join(RetrieveTask_.queueMessage, JoinType.LEFT); + return q.where( + cb.equal(queueMsg.get(QueueMessage_.batchID), batchID), + cb.equal(queueMsg.get(QueueMessage_.status), status)); + } + @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public Iterator listRetrieveTasks( TaskQueryParam queueTaskQueryParam, TaskQueryParam retrieveTaskQueryParam, int offset, int limit) { diff --git a/dcm4chee-arc-stgcmt/src/main/java/org/dcm4chee/arc/stgcmt/impl/StgCmtEJB.java b/dcm4chee-arc-stgcmt/src/main/java/org/dcm4chee/arc/stgcmt/impl/StgCmtEJB.java index d0c263be12..ea1dd5cc61 100644 --- a/dcm4chee-arc-stgcmt/src/main/java/org/dcm4chee/arc/stgcmt/impl/StgCmtEJB.java +++ b/dcm4chee-arc-stgcmt/src/main/java/org/dcm4chee/arc/stgcmt/impl/StgCmtEJB.java @@ -435,7 +435,7 @@ public List listStgVerBatches( query.setMaxResults(limit); List stgVerBatches = new ArrayList<>(); - query.getResultList().forEach(batch -> { + query.getResultStream().forEach(batch -> { String batchID = batch.get(batchid); StgVerBatch stgVerBatch = new StgVerBatch(batchID); stgVerBatch.setProcessingStartTimeRange( @@ -455,47 +455,35 @@ public List listStgVerBatches( batch.get(maxUpdatedTime)); stgVerBatch.setDeviceNames(em.createQuery( - batchIDQuery(batchID, String.class) + batchIDQuery(batchID) .select(queueMsg.get(QueueMessage_.deviceName)) .distinct(true) .orderBy(cb.asc(queueMsg.get(QueueMessage_.deviceName)))) .getResultList()); stgVerBatch.setLocalAETs(em.createQuery( - batchIDQuery(batchID, String.class) + batchIDQuery(batchID) .select(stgVerTask.get(StorageVerificationTask_.localAET)) .distinct(true) .orderBy(cb.asc(stgVerTask.get(StorageVerificationTask_.localAET)))) .getResultList()); stgVerBatch.setCompleted(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.COMPLETED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.COMPLETED).select(cb.count(queueMsg))) .getSingleResult()); stgVerBatch.setCanceled(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.CANCELED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.CANCELED).select(cb.count(queueMsg))) .getSingleResult()); stgVerBatch.setWarning(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.WARNING)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.WARNING).select(cb.count(queueMsg))) .getSingleResult()); stgVerBatch.setFailed(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.FAILED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.FAILED).select(cb.count(queueMsg))) .getSingleResult()); stgVerBatch.setScheduled(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.SCHEDULED)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.SCHEDULED).select(cb.count(queueMsg))) .getSingleResult()); stgVerBatch.setInProcess(em.createQuery( - batchIDQuery(batchID, Long.class) - .where(cb.equal(queueMsg.get(QueueMessage_.status), QueueMessage.Status.IN_PROCESS)) - .select(cb.count(queueMsg))) + batchIDQuery(batchID, QueueMessage.Status.IN_PROCESS).select(cb.count(queueMsg))) .getSingleResult()); stgVerBatches.add(stgVerBatch); @@ -527,13 +515,23 @@ private CriteriaQuery groupBy(CriteriaQuery q) { return q.groupBy(queueMsg.get(QueueMessage_.batchID)); } - private CriteriaQuery batchIDQuery(String batchID, Class clazz) { + private CriteriaQuery batchIDQuery(String batchID) { CriteriaBuilder cb = em.getCriteriaBuilder(); - CriteriaQuery q = cb.createQuery(clazz); + CriteriaQuery q = cb.createQuery(String.class); stgVerTask = q.from(StorageVerificationTask.class); queueMsg = stgVerTask.join(StorageVerificationTask_.queueMessage, JoinType.LEFT); return q.where(cb.equal(queueMsg.get(QueueMessage_.batchID), batchID)); } + + private CriteriaQuery batchIDQuery(String batchID, QueueMessage.Status status) { + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery q = cb.createQuery(Long.class); + stgVerTask = q.from(StorageVerificationTask.class); + queueMsg = stgVerTask.join(StorageVerificationTask_.queueMessage, JoinType.LEFT); + return q.where( + cb.equal(queueMsg.get(QueueMessage_.batchID), batchID), + cb.equal(queueMsg.get(QueueMessage_.status), status)); + } public List findSeriesForScheduledStorageVerifications(int fetchSize) { return em.createNamedQuery(Series.SCHEDULED_STORAGE_VERIFICATION, Series.StorageVerification.class)