Skip to content

Commit

Permalink
Replace QueryDSL by JPA Criteria API dcm4che#1806
Browse files Browse the repository at this point in the history
  • Loading branch information
vrindanayak committed Mar 19, 2019
1 parent fc6b413 commit 7071103
Show file tree
Hide file tree
Showing 7 changed files with 113 additions and 129 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ public List<DiffBatch> listDiffBatches(
query.setMaxResults(limit);

List<DiffBatch> diffBatches = new ArrayList<>();
query.getResultList().forEach(batch -> {
query.getResultStream().forEach(batch -> {
String batchID = batch.get(batchid);
DiffBatch diffBatch = new DiffBatch(batchID);
diffBatch.setProcessingStartTimeRange(
Expand Down Expand Up @@ -402,8 +402,7 @@ public List<DiffBatch> 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());
Expand All @@ -419,34 +418,22 @@ public List<DiffBatch> 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);
Expand Down Expand Up @@ -486,6 +473,26 @@ private <T> CriteriaQuery<T> batchIDQuery(String batchID, Class<T> clazz) {
return q.where(cb.equal(queueMsg.get(QueueMessage_.batchID), batchID));
}

private CriteriaQuery<Long> batchIDQuery(String batchID, QueueMessage.Status status) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> 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<String> batchIDQuery(String batchID) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> 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<DiffTask> listDiffTasks(
TaskQueryParam queueTaskQueryParam, TaskQueryParam diffTaskQueryParam, int offset, int limit) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,7 @@ public List<ExportBatch> listExportBatches(
query.setMaxResults(limit);

List<ExportBatch> exportBatches = new ArrayList<>();
query.getResultList().forEach(batch -> {
query.getResultStream().forEach(batch -> {
String batchID = batch.get(batchid);
ExportBatch exportBatch = new ExportBatch(batchID);
exportBatch.setProcessingStartTimeRange(
Expand All @@ -438,47 +438,35 @@ public List<ExportBatch> 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);
Expand Down Expand Up @@ -510,14 +498,24 @@ private <T> CriteriaQuery<T> groupBy(CriteriaQuery<T> q) {
return q.groupBy(queueMsg.get(QueueMessage_.batchID));
}

private <T> CriteriaQuery<T> batchIDQuery(String batchID, Class<T> clazz) {
private CriteriaQuery<String> batchIDQuery(String batchID) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<T> q = cb.createQuery(clazz);
CriteriaQuery<String> 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<Long> batchIDQuery(String batchID, QueueMessage.Status status) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> 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<ExportTask> listExportTasks(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,7 @@ public List<Predicate> stgVerPredicates(
return predicates;
}

private <Z> void matchQueueMsg(List<Predicate> predicates,
TaskQueryParam taskQueryParam, From<Z, QueueMessage> queueMsg) {
private <Z> void matchQueueMsg(List<Predicate> predicates, TaskQueryParam taskQueryParam, From<Z, QueueMessage> queueMsg) {
if (taskQueryParam == null || queueMsg == null)
return;

Expand All @@ -191,9 +190,7 @@ private <Z> void matchQueueMsg(List<Predicate> predicates,
predicates.add(cb.lessThan(queueMsg.get(QueueMessage_.updatedTime), taskQueryParam.getUpdatedBefore()));
}

private void matchExportTask(
List<Predicate> predicates, TaskQueryParam taskQueryParam,
Root<ExportTask> exportTask) {
private void matchExportTask(List<Predicate> predicates, TaskQueryParam taskQueryParam, Root<ExportTask> exportTask) {
if (!taskQueryParam.getExporterIDs().isEmpty())
predicates.add(cb.and(exportTask.get(ExportTask_.exporterID).in(taskQueryParam.getExporterIDs())));
if (taskQueryParam.getDeviceName() != null)
Expand All @@ -208,9 +205,7 @@ private void matchExportTask(
cb, exportTask.get(ExportTask_.updatedTime), taskQueryParam.getUpdatedTime()));
}

private void matchRetrieveTask(List<Predicate> predicates,
TaskQueryParam taskQueryParam,
Path<RetrieveTask> retrieveTask) {
private void matchRetrieveTask(List<Predicate> predicates, TaskQueryParam taskQueryParam, Path<RetrieveTask> retrieveTask) {
if (taskQueryParam.getLocalAET() != null)
predicates.add(cb.equal(retrieveTask.get(RetrieveTask_.localAET), taskQueryParam.getLocalAET()));
if (taskQueryParam.getRemoteAET() != null)
Expand All @@ -227,8 +222,7 @@ private void matchRetrieveTask(List<Predicate> predicates,
cb, retrieveTask.get(RetrieveTask_.updatedTime), taskQueryParam.getUpdatedTime()));
}

private void matchDiffTask(
List<Predicate> predicates, TaskQueryParam taskQueryParam, Path<DiffTask> diffTask) {
private void matchDiffTask(List<Predicate> predicates, TaskQueryParam taskQueryParam, Path<DiffTask> diffTask) {
if (taskQueryParam.getLocalAET() != null)
predicates.add(cb.equal(diffTask.get(DiffTask_.localAET), taskQueryParam.getLocalAET()));
if (taskQueryParam.getPrimaryAET() != null)
Expand All @@ -250,8 +244,7 @@ private void matchDiffTask(
}

private void matchStgVerTask(
List<Predicate> predicates, TaskQueryParam taskQueryParam,
Root<StorageVerificationTask> stgVerTask) {
List<Predicate> predicates, TaskQueryParam taskQueryParam, Root<StorageVerificationTask> stgVerTask) {
if (taskQueryParam.getLocalAET() != null)
predicates.add(cb.equal(stgVerTask.get(StorageVerificationTask_.localAET), taskQueryParam.getLocalAET()));
if (taskQueryParam.getStudyIUID() != null)
Expand Down Expand Up @@ -319,13 +312,8 @@ public Order queueMessageOrder(String orderBy, Path<QueueMessage> queueMsg) {
queueMsg.get(QueueMessage_.updatedTime));
}

private Order taskOrder(
String orderby, Path<Date> createdTime, Path<Date> updatedTime) {
return order(orderby, createdTime, updatedTime);
}

private Order order(String orderby, Path<Date> createdTime, Path<Date> updatedTime) {
switch (orderby) {
private Order taskOrder(String orderBy, Path<Date> createdTime, Path<Date> updatedTime) {
switch (orderBy) {
case "createdTime":
return cb.asc(createdTime);
case "updatedTime":
Expand All @@ -336,11 +324,10 @@ private Order order(String orderby, Path<Date> createdTime, Path<Date> updatedTi
return cb.desc(updatedTime);
}

throw new IllegalArgumentException(orderby);
throw new IllegalArgumentException(orderBy);
}

public List<Predicate> matchStgCmtResult(
Root<StgCmtResult> stgCmtResult, TaskQueryParam stgCmtResultQueryParam) {
public List<Predicate> matchStgCmtResult(Root<StgCmtResult> stgCmtResult, TaskQueryParam stgCmtResultQueryParam) {
List<Predicate> predicates = new ArrayList<>();
if (stgCmtResultQueryParam.getStgCmtStatus() != null)
predicates.add(cb.equal(stgCmtResult.get(StgCmtResult_.status), stgCmtResultQueryParam.getStgCmtStatus()));
Expand Down Expand Up @@ -377,8 +364,8 @@ public Order stgVerBatchOrder(String orderby, Path<StorageVerificationTask> stgV
stgVerTask.get(StorageVerificationTask_.updatedTime));
}

private Order batchOrder(String orderby, Path<Date> createdTime, Path<Date> updatedTime) {
switch (orderby) {
private Order batchOrder(String orderBy, Path<Date> createdTime, Path<Date> updatedTime) {
switch (orderBy) {
case "createdTime":
return cb.asc(cb.least(createdTime));
case "updatedTime":
Expand All @@ -389,11 +376,10 @@ private Order batchOrder(String orderby, Path<Date> createdTime, Path<Date> upda
return cb.desc(cb.greatest(updatedTime));
}

throw new IllegalArgumentException(orderby);
throw new IllegalArgumentException(orderBy);
}

private void matchQueueBatch(List<Predicate> predicates, TaskQueryParam taskQueryParam,
Path<QueueMessage> queueMsg) {
private void matchQueueBatch(List<Predicate> predicates, TaskQueryParam taskQueryParam, Path<QueueMessage> queueMsg) {
predicates.add(cb.isNotNull(queueMsg.get(QueueMessage_.batchID)));
if (taskQueryParam.getStatus() != null)
predicates.add(cb.equal(queueMsg.get(QueueMessage_.status), taskQueryParam.getStatus()));
Expand All @@ -404,8 +390,7 @@ private void matchQueueBatch(List<Predicate> predicates, TaskQueryParam taskQuer

}

private void matchExportBatch(List<Predicate> predicates, TaskQueryParam taskQueryParam,
Path<ExportTask> exportTask) {
private void matchExportBatch(List<Predicate> predicates, TaskQueryParam taskQueryParam, Path<ExportTask> exportTask) {
if (!taskQueryParam.getExporterIDs().isEmpty())
predicates.add(cb.and(exportTask.get(ExportTask_.exporterID).in(taskQueryParam.getExporterIDs())));
if (taskQueryParam.getDeviceName() != null)
Expand All @@ -419,8 +404,7 @@ private void matchExportBatch(List<Predicate> predicates, TaskQueryParam taskQue

}

private void matchRetrieveBatch(List<Predicate> predicates, TaskQueryParam taskQueryParam,
Path<RetrieveTask> retrieveTask) {
private void matchRetrieveBatch(List<Predicate> predicates, TaskQueryParam taskQueryParam, Path<RetrieveTask> retrieveTask) {
if (taskQueryParam.getLocalAET() != null)
predicates.add(cb.equal(retrieveTask.get(RetrieveTask_.localAET), taskQueryParam.getLocalAET()));
if (taskQueryParam.getRemoteAET() != null)
Expand All @@ -436,8 +420,7 @@ private void matchRetrieveBatch(List<Predicate> predicates, TaskQueryParam taskQ

}

private void matchDiffBatch(List<Predicate> predicates, TaskQueryParam taskQueryParam,
Path<DiffTask> diffTask) {
private void matchDiffBatch(List<Predicate> predicates, TaskQueryParam taskQueryParam, Path<DiffTask> diffTask) {
if (taskQueryParam.getLocalAET() != null)
predicates.add(cb.equal(diffTask.get(DiffTask_.localAET), taskQueryParam.getLocalAET()));
if (taskQueryParam.getPrimaryAET() != null)
Expand All @@ -458,8 +441,8 @@ private void matchDiffBatch(List<Predicate> predicates, TaskQueryParam taskQuery
cb, diffTask.get(DiffTask_.updatedTime), taskQueryParam.getUpdatedTime())));
}

private void matchStgVerBatch(List<Predicate> predicates, TaskQueryParam taskQueryParam,
Path<StorageVerificationTask> stgVerTask) {
private void matchStgVerBatch(
List<Predicate> predicates, TaskQueryParam taskQueryParam, Path<StorageVerificationTask> stgVerTask) {
if (taskQueryParam.getLocalAET() != null)
predicates.add(cb.equal(stgVerTask.get(StorageVerificationTask_.localAET), taskQueryParam.getLocalAET()));
if (taskQueryParam.getCreatedTime() != null)
Expand Down
Loading

0 comments on commit 7071103

Please sign in to comment.