Skip to content

Commit

Permalink
RESTful service List Export Tasks does not return tasks which are not…
Browse files Browse the repository at this point in the history
… yet scheduled #1362
  • Loading branch information
vrindanayak committed May 2, 2018
1 parent fa46332 commit d9eff4e
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ void scheduleExportTask(String studyUID, String seriesUID, String objectUID, Exp

void updateExportTask(Long pk);

ExportTaskQuery listExportTasks(Predicate matchQueueMessage, Predicate matchExportTask,
ExportTaskQuery listExportTasks(QueueMessage.Status status, Predicate matchQueueMessage, Predicate matchExportTask,
OrderSpecifier<Date> order, int offset, int limit);

long countExportTasks(QueueMessage.Status status, Predicate matchQueueMessage, Predicate matchExportTask);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -314,36 +314,34 @@ public void updateExportTask(Long pk) {

@Override
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public ExportTaskQuery listExportTasks(Predicate matchQueueMessage, Predicate matchExportTask,
public ExportTaskQuery listExportTasks(QueueMessage.Status status, Predicate matchQueueMessage, Predicate matchExportTask,
OrderSpecifier<Date> order, int offset, int limit) {
return new ExportTaskQueryImpl(
return new ExportTaskQueryImpl(status,
openStatelessSession(), queryFetchSize(), matchQueueMessage, matchExportTask, order, offset, limit);
}

@Override
public long countExportTasks(QueueMessage.Status status, Predicate matchQueueMessage, Predicate matchExportTask) {
return status == QueueMessage.Status.TO_SCHEDULE
? createQueryToSchedule(matchExportTask).fetchCount()
: status == null
? createQueryToSchedule(matchExportTask).fetchCount() + createQuery(matchQueueMessage, matchExportTask).fetchCount()
: createQuery(matchQueueMessage, matchExportTask).fetchCount();
return createQuery(status, matchQueueMessage, matchExportTask).fetchCount();
}

private HibernateQuery<ExportTask> createQuery(Predicate matchQueueMessage, Predicate matchExportTask) {
private HibernateQuery<ExportTask> createQuery(QueueMessage.Status status, Predicate matchQueueMessage, Predicate matchExportTask) {
HibernateQuery<QueueMessage> queueMsgQuery = new HibernateQuery<QueueMessage>(em.unwrap(Session.class))
.from(QQueueMessage.queueMessage)
.where(matchQueueMessage);

return new HibernateQuery<ExportTask>(em.unwrap(Session.class))
.from(QExportTask.exportTask)
.leftJoin(QExportTask.exportTask.queueMessage, QQueueMessage.queueMessage)
.where(matchExportTask, QExportTask.exportTask.queueMessage.in(queueMsgQuery));
.where(matchExportTask, queuePredicate(status, queueMsgQuery));
}

private HibernateQuery<ExportTask> createQueryToSchedule(Predicate matchExportTask) {
return new HibernateQuery<ExportTask>(em.unwrap(Session.class))
.from(QExportTask.exportTask)
.where(matchExportTask, QExportTask.exportTask.queueMessage.isNull());
private Predicate queuePredicate(QueueMessage.Status status, HibernateQuery<QueueMessage> queueMsgQuery) {
return status == QueueMessage.Status.TO_SCHEDULE
? QExportTask.exportTask.queueMessage.isNull()
: status == null
? ExpressionUtils.or(QExportTask.exportTask.queueMessage.isNull(), QExportTask.exportTask.queueMessage.in(queueMsgQuery))
: QExportTask.exportTask.queueMessage.in(queueMsgQuery);
}

@Override
Expand Down Expand Up @@ -424,7 +422,7 @@ public int deleteTasks(Predicate matchQueueMessage, Predicate matchExportTask) {
@Override
public List<ExportBatch> listExportBatches(Predicate matchQueueBatch, Predicate matchExportBatch,
OrderSpecifier<Date> order, int offset, int limit) {
HibernateQuery<ExportTask> exportTaskQuery = createQuery(matchQueueBatch, matchExportBatch);
HibernateQuery<ExportTask> exportTaskQuery = createQuery(null, matchQueueBatch, matchExportBatch);
if (limit > 0)
exportTaskQuery.limit(limit);
if (offset > 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
package org.dcm4chee.arc.export.mgt.impl;

import com.mysema.commons.lang.CloseableIterator;
import com.querydsl.core.types.ExpressionUtils;
import com.querydsl.core.types.OrderSpecifier;
import com.querydsl.core.types.Predicate;
import com.querydsl.jpa.hibernate.HibernateQuery;
Expand All @@ -67,7 +68,7 @@ class ExportTaskQueryImpl implements ExportTaskQuery {
private Transaction transaction;
private CloseableIterator<ExportTask> iterate;

public ExportTaskQueryImpl(StatelessSession session, int fetchSize,
public ExportTaskQueryImpl(QueueMessage.Status status, StatelessSession session, int fetchSize,
Predicate matchQueueMessage,
Predicate matchExportTask,
OrderSpecifier<Date> order,
Expand All @@ -80,7 +81,7 @@ public ExportTaskQueryImpl(StatelessSession session, int fetchSize,
query = new HibernateQuery<ExportTask>(session)
.from(QExportTask.exportTask)
.leftJoin(QExportTask.exportTask.queueMessage, QQueueMessage.queueMessage)
.where(matchExportTask, QExportTask.exportTask.queueMessage.in(queueMsgQuery));
.where(matchExportTask, queuePredicate(status, queueMsgQuery));
if (limit > 0)
query.limit(limit);
if (offset > 0)
Expand All @@ -90,6 +91,13 @@ public ExportTaskQueryImpl(StatelessSession session, int fetchSize,
query.setFetchSize(fetchSize);
}

private Predicate queuePredicate(QueueMessage.Status status, HibernateQuery<QueueMessage> queueMsgQuery) {
return status == QueueMessage.Status.TO_SCHEDULE
? QExportTask.exportTask.queueMessage.isNull()
: status == null
? ExpressionUtils.or(QExportTask.exportTask.queueMessage.isNull(), QExportTask.exportTask.queueMessage.in(queueMsgQuery))
: QExportTask.exportTask.queueMessage.in(queueMsgQuery);
}

@Override
public void close() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,9 +145,10 @@ public Response listExportTasks(@QueryParam("accept") String accept) {
Variant.mediaTypes(MediaType.APPLICATION_JSON_TYPE, MediaTypes.TEXT_CSV_UTF8_TYPE).build())
.build();

ExportTaskQuery tasks = mgr.listExportTasks(
QueueMessage.Status status = status();
ExportTaskQuery tasks = mgr.listExportTasks(status,
MatchTask.matchQueueMessage(
null, deviceName, status(), batchID, null,null, null, null),
null, deviceName, status, batchID, null,null, null, null),
MatchTask.matchExportTask(exporterID, deviceName, studyUID, createdTime, updatedTime),
MatchTask.exportTaskOrder(orderby),
parseInt(offset), parseInt(limit)
Expand Down Expand Up @@ -281,7 +282,7 @@ private Response rescheduleTasks(String newExporterID) {
Predicate matchExportTask = MatchTask.matchExportTask(
exporterID, deviceName, studyUID, createdTime, updatedTime);
int count = 0;
try (ExportTaskQuery exportTasks = mgr.listExportTasks(
try (ExportTaskQuery exportTasks = mgr.listExportTasks(status,
matchQueueMessage, matchExportTask, null, 0, 0)) {
for (ExportTask task : exportTasks) {
mgr.rescheduleExportTask(
Expand Down

0 comments on commit d9eff4e

Please sign in to comment.